首页 > 编程语言 >用ArcGIS模型构建器生成、导出Python转换空间坐标系的代码

用ArcGIS模型构建器生成、导出Python转换空间坐标系的代码

时间:2024-01-18 11:24:46浏览次数:25  
标签:1984 Python 代码 ArcGIS WGS arcpy 坐标系

  本文介绍在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写的代码转为工具箱与自定义工具详细了解。

标签:1984,Python,代码,ArcGIS,WGS,arcpy,坐标系
From: https://www.cnblogs.com/fkxxgis/p/17972118

相关文章

  • 【Python小随笔】获取路径的所有文件夹信息
    获取文件夹下的所有文件名,文件大小,更新时间importosimportdatetimedefget_files_info(folder_path):files_info=[]#获取起始路径base_path=os.path.abspath(folder_path)#遍历文件夹下的所有文件和子文件夹forroot,dirs,filesinos.wa......
  • Python工具箱系列(四十八)
    如何操作docx文档(下)   当要更细致的操作WORD文档时,python-docx库就有些力不从心了。这时强力的pythonwin32com库可以帮助我们完成更细致复杂的工作。笔者经常要组织大型文档的汇总(例如标书),此时文档中插入的图片各式各样,缩写时也无从知道图片在整个文档中的顺序,所以对所有......
  • Python第六小节 进行实战
    #方法一:lst=['88','89','90','98','00','99']foriinrange(len(lst)):#永昌成都直接遍历iflst[i]==0:lst[i]='200'+lst[i]else:lst[i]='19'+lst[i]print(lst)#......
  • Python自带的GUI库:Tkinter库使用手册(未完善)
    文章目录一、Tkinter是什么二、主窗口1、窗口的常用方法2、实例参考资料一、Tkinter是什么Tkinter(即tkinterface,简称“Tk”)本质上是对Tcl/Tk软件包的Python接口封装,它是Python官方推荐的GUI工具包,属于Python自带的标准库模块,当您安装好Python后,就可以直接使用它,而......
  • Python 图像查看器
    当然,这里是一个简洁而全面的介绍,适合用于在博客中介绍这个图像查看器程序:Python图像查看器在这篇博客中,我将向大家介绍一个由我开发的简单但功能强大的图像查看器。这个图像查看器是用Python编写的,利用了Tkinter图形用户界面库来提供直观的用户体验。它不仅可以浏览单个文件......
  • 【Python】解压压缩包(处理中文乱码问题)
    支持中文编码fromzipfileimportZipFiledefsupport_gbk(zip_file):name_to_info=zip_file.NameToInfo#copymapfirstforname,infoinname_to_info.copy().items():real_name=name.encode('cp437').decode('gbk')......
  • 使用pyinstaller打包python程序时报错UPX is not available
    使用pyinstaller打包python代码程序时报错:UPXisnotavailable原因是 python环境的Scripts文件夹内缺少了一个upx.exe的文件到官网https://github.com/upx/upx/releases/tag/v4.2.2中下载一个UPX,将下载文件解压后得到的upx.exe文件(解压后的所有文件里只要这一个文件即可,......
  • Python爬取B站视频 抓包过程分享
    B站对于很多人来说并不陌生,对于经常玩电脑的人来说,每天逛一逛B站受益匪浅。里面不仅有各种各样的知识库,就连很多游戏攻略啥的都有,真的是想要啥有啥。这么好用的平台得好好利用下。今天我将写一个爬虫程序专门抓取B站的视频,并且贴上详细的抓包过程。首先,我们需要安装requests库来发......
  • python 百分号输出
    python使用format()方法num=5print("{:.0%}".format(num/100))使用f-string需要python3.6以上版本num=5print(f"{num/100:.0%}")......
  • python创建httpserver,并处理get、post请求
    搭建一个简单的httpserver,用于测试数据通讯fromhttp.serverimportHTTPServer,BaseHTTPRequestHandlerimportjsondata={'result':'thisisatest'}host=('localhost',8888)classResquest(BaseHTTPRequestHandler):  defdo_GET(self):   ......