ArcGIS中ArcMap通过模型构建器ModelBuilder导出地理与投影坐标系转换Python代码的方法

简介: ArcGIS中ArcMap通过模型构建器ModelBuilder导出地理与投影坐标系转换Python代码的方法

  本文介绍在ArcMap软件中,通过创建模型构建器(ModelBuilder),从而导出地理坐标系与投影坐标系之间相互转换Python代码的方法。

  在GIS领域中,矢量、栅格图层的投影转换是一个经常遇见的问题;而由于地理坐标系与投影坐标系各自都分别具有很多不同的种类,且二者之间相互转换涉及到很多复杂的参数,因此对于我这种非专业的GIS二次开发从业者来说,这一转换很难用自己编写的代码来实现。那么,我们有没有什么比较快捷的方法,可以获取从某一坐标系转换为另一坐标系的代码呢?

  这样的需求,可以在ArcMap软件中得到较为便捷的实现。例如,我们现在有一个北京市边界矢量数据北京边界.shp,其没有经过投影,地理坐标系为GCS_WGS_1984;而我们的需求是,想获取一个代码,这个代码可以对这一矢量数据进行投影,投影为WGS 1984 UTM Zone 50N坐标系。

  话不多说,我们直接开始操作。

  首先,我们需要完整地按照博客ArcGIS中ArcMap模型构建器ModelBuilder的模型建立与运行操作方法https://blog.csdn.net/zhebushibiaoshifu/article/details/121561363)中提及的方法,建立如下的一个模型。

  接下来,在模型构建器窗口中选择“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程序脚本新建工具箱与自定义工具,大家可以查看这篇博客https://blog.csdn.net/zhebushibiaoshifu/article/details/121518404)详细了解。

欢迎关注公众号/CSDN/知乎/微博:疯狂学习GIS


相关文章
|
3月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
193 26
|
2月前
|
测试技术 Python
Python装饰器:为你的代码施展“魔法”
Python装饰器:为你的代码施展“魔法”
242 100
|
2月前
|
开发者 Python
Python列表推导式:一行代码的艺术与力量
Python列表推导式:一行代码的艺术与力量
402 95
|
3月前
|
Python
Python的简洁之道:5个让代码更优雅的技巧
Python的简洁之道:5个让代码更优雅的技巧
249 104
|
3月前
|
开发者 Python
Python神技:用列表推导式让你的代码更优雅
Python神技:用列表推导式让你的代码更优雅
448 99
|
2月前
|
缓存 Python
Python装饰器:为你的代码施展“魔法
Python装饰器:为你的代码施展“魔法
153 88
|
3月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
417 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
2月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
3月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
459 7
|
3月前
|
JSON 缓存 开发者
淘宝商品详情接口(item_get)企业级全解析:参数配置、签名机制与 Python 代码实战
本文详解淘宝开放平台taobao.item_get接口对接全流程,涵盖参数配置、MD5签名生成、Python企业级代码实现及高频问题排查,提供可落地的实战方案,助你高效稳定获取商品数据。

热门文章

最新文章

推荐镜像

更多