用ArcGIS模型构建器生成、导出Python转换空间坐标系的代码
2024/1/18 14:02:24
本文主要是介绍用ArcGIS模型构建器生成、导出Python转换空间坐标系的代码,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文介绍在ArcMap软件中,通过创建模型构建器(ModelBuilder),导出地理坐标系与投影坐标系之间相互转换的Python代码的方法。
在GIS领域中,矢量、栅格图层的投影转换是一个经常遇见的问题;而由于地理坐标系与投影坐标系各自都分别具有很多不同的种类,且二者之间相互转换涉及到很多复杂的参数,因此对于非专业的GIS二次开发从业者来说,这一转换很难用自己编写的代码来实现。那么,我们有没有什么比较快捷的方法,可以获取从某一坐标系转换为另一坐标系的代码呢?
这样的需求,可以在ArcMap软件中得到较为便捷的实现。例如,我们现在有一个北京市边界矢量数据北京边界.shp
,其没有经过投影,地理坐标系为GCS_WGS_1984
;而我们的需求是,想获取一个代码,这个代码可以对这一矢量数据进行投影,投影为WGS 1984 UTM Zone 50N
坐标系。
话不多说,我们直接开始操作。
首先,我们需要完整地按照博客ArcGIS模型构建器ModelBuilder的使用方法中提及的方法,建立如下的一个模型。
接下来,在模型构建器窗口中选择“Export”→“To Python Script”,将模型导出为Python脚本。
随后,打开我们刚刚导出的Python脚本,就可以看到具体的代码。
具体代码为:
# -*- coding: utf-8 -*- # --------------------------------------------------------------------------- # p.py # Created on: 2022-03-08 21:13:42.00000 # (generated by ArcGIS/ModelBuilder) # Description: # Used to convert the Beijing boundary data with the geographic coordinate system into a projected coordinate system (UTM-50). # --------------------------------------------------------------------------- # Import arcpy module import arcpy # Local variables: 北京边界_shp = "G:\\Python_Home2\\arcpy大作业\\北京边界.shp" BeijingBoundaryPro = "G:\\Python_Home2\\Data\\BeijingBoundaryPro" # Process: Project arcpy.Project_management(北京边界_shp, BeijingBoundaryPro, "PROJCS['WGS_1984_UTM_Zone_50N',GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Transverse_Mercator'],PARAMETER['False_Easting',500000.0],PARAMETER['False_Northing',0.0],PARAMETER['Central_Meridian',117.0],PARAMETER['Scale_Factor',0.9996],PARAMETER['Latitude_Of_Origin',0.0],UNIT['Meter',1.0]]", "", "GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]]", "NO_PRESERVE_SHAPE", "", "NO_VERTICAL")
不难看到,导出代码中的关键部分——arcpy.Project_management()
函数涉及到非常多的参数;由此可以再一次验证,如果我们想手动写出地理坐标系与投影坐标系之间的转换代码,可以说是非常困难的。
那么,我们导出了代码,可以怎么应用呢?我们就继续以刚刚导出的这一代码为例进行进一步的操作——比如,对上述代码中的两个参数稍加以修改,并在最开始的部分添加一个新的参数,如下所示:
# -*- coding: utf-8 -*- # @author: ChuTianjia import arcpy arcpy.env.workspace=arcpy.GetParameterAsText(0) original_shp=arcpy.GetParameterAsText(1) projected_shp=arcpy.GetParameterAsText(2) arcpy.Project_management(original_shp,projected_shp,\ "PROJCS['WGS_1984_UTM_Zone_50N',\ GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],\ PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Transverse_Mercator'],\ PARAMETER['False_Easting',500000.0],PARAMETER['False_Northing',0.0],PARAMETER['Central_Meridian',117.0],\ PARAMETER['Scale_Factor',0.9996],PARAMETER['Latitude_Of_Origin',0.0],UNIT['Meter',1.0]]",\ "", "GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',SPHEROID['WGS_1984',6378137.0,298.257223563]],\ PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]]", "NO_PRESERVE_SHAPE", "", "NO_VERTICAL")
其中,arcpy.env.workspace
代表当前工作空间,original_shp
代表投影前的文件,在本文的例子中就是北京市边界数量数据文件,projected_shp
代表投影后的文件,在本文中就是投影后北京市边界矢量数据的具体文件。通过这样的修改,就可以使用该代码,对任意一个原本地理坐标系为GCS_WGS_1984
的图层进行投影,且投影坐标系为WGS 1984 UTM Zone 50N
。
在这里还有一点需要注意,由于编写代码时,希望代码后期可以在ArcMap中直接通过工具箱运行,即用到Python程序脚本新建工具箱与自定义工具的方法;因此,代码中对于一些需要初始定义的变量,都用到了arcpy.GetParameterAsText()
函数。大家如果只是希望在IDLE中运行代码,那么直接对这些变量进行具体赋值即可。关于Python程序脚本新建工具箱与自定义工具,大家可以查看ArcMap将Python写的代码转为工具箱与自定义工具详细了解。
这篇关于用ArcGIS模型构建器生成、导出Python转换空间坐标系的代码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享