??本文介紹在ArcMap軟件中,通過創(chuàng)建模型構建器(ModelBuilder),導出地理坐標系與投影坐標系之間相互轉換的Python代碼的方法。
??在GIS領域中,矢量、柵格圖層的投影轉換是一個經(jīng)常遇見的問題;而由于地理坐標系與投影坐標系各自都分別具有很多不同的種類,且二者之間相互轉換涉及到很多復雜的參數(shù),因此對于非專業(yè)的GIS二次開發(fā)從業(yè)者來說,這一轉換很難用自己編寫的代碼來實現(xiàn)。那么,我們有沒有什么比較快捷的方法,可以獲取從某一坐標系轉換為另一坐標系的代碼呢?
??這樣的需求,可以在ArcMap軟件中得到較為便捷的實現(xiàn)。例如,我們現(xiàn)在有一個北京市邊界矢量數(shù)據(jù)北京邊界.shp
,其沒有經(jīng)過投影,地理坐標系為GCS_WGS_1984
;而我們的需求是,想獲取一個代碼,這個代碼可以對這一矢量數(shù)據(jù)進行投影,投影為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大作業(yè)\\北京邊界.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()
函數(shù)涉及到非常多的參數(shù);由此可以再一次驗證,如果我們想手動寫出地理坐標系與投影坐標系之間的轉換代碼,可以說是非常困難的。
??那么,我們導出了代碼,可以怎么應用呢?我們就繼續(xù)以剛剛導出的這一代碼為例進行進一步的操作——比如,對上述代碼中的兩個參數(shù)稍加以修改,并在最開始的部分添加一個新的參數(shù),如下所示:
# -*- 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
代表投影前的文件,在本文的例子中就是北京市邊界數(shù)量數(shù)據(jù)文件,projected_shp
代表投影后的文件,在本文中就是投影后北京市邊界矢量數(shù)據(jù)的具體文件。通過這樣的修改,就可以使用該代碼,對任意一個原本地理坐標系為GCS_WGS_1984
的圖層進行投影,且投影坐標系為WGS 1984 UTM Zone 50N
。文章來源:http://www.zghlxwxcb.cn/news/detail-800907.html
??在這里還有一點需要注意,由于編寫代碼時,希望代碼后期可以在ArcMap中直接通過工具箱運行,即用到Python程序腳本新建工具箱與自定義工具的方法;因此,代碼中對于一些需要初始定義的變量,都用到了arcpy.GetParameterAsText()
函數(shù)。大家如果只是希望在IDLE中運行代碼,那么直接對這些變量進行具體賦值即可。關于Python程序腳本新建工具箱與自定義工具,大家可以查看ArcMap將Python寫的代碼轉為工具箱與自定義工具詳細了解。文章來源地址http://www.zghlxwxcb.cn/news/detail-800907.html
到了這里,關于用ArcGIS模型構建器生成、導出Python轉換空間坐標系的代碼的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!