用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转换空间坐标系的代码的全部內容,希望文章能夠幫你解決所遇到的問題。