通過Arcpy在ArcMap工具箱中添加腳本計算面圖層的起終點坐標


 

關鍵詞:

  Arcpy,ArcMap Toolbox, Coordinates of Polygon

 

需求分析:

  Arcmap中添加有三個圖層:圖層“GY鄉級河道”(面圖層)是全縣13個鄉鎮全部的鄉級河道,共計249條;圖層“鄉級河道polygon”(面圖層)是其中某一個鄉鎮的鄉級河道,有10條鄉級河道,現在以此鄉鎮的10條鄉級河道為例,求取這10個面要素的起終點坐標;圖層“鄉級河道polyline”是已經求好的這10條鄉級河道的中心線,求取面圖層的中心線的過程這里不再贅述。

  因為面圖層計算坐標時只能計算中心點的XY,而線圖層可以計算起點、終點和中心點的XY,,所以必須先獲得面圖層的中心線,然后再計算中心線的起終點坐標。在本例中,即先求取“鄉級河道polygon”的中心線“鄉級河道polyline”,再計算其起終點坐標,即為所求鄉級河道的起終點坐標。

  預期結果是輸出一個表格,包含TYBH(統一編號)、NAME(名稱)、Xs(起點經度)、Ys(起點緯度)、Xe(終點經度)和Ye(終點緯度)等字段。現在“GY鄉級河道”圖層中有TYBH、XZQBM(行政區編碼)和NAME字段,“鄉級河道polygon”圖層中有“NAME”字段和“Id”字段,“鄉級河道polyline”圖層中有“Id”字段,准備將計算結果集中到“鄉級河道polyline”圖層中。“鄉級河道polyline”圖層和“鄉級河道polygon”圖層可以通過字段“Id”關聯,“鄉級河道polygon”圖層和“GY鄉級河道”圖層通過字段“NAME”關聯,因為不同鄉鎮可能會有河道重名情況,即關聯時會有多個相同匹配的情況,所以要先通過“XZQBM”字段篩選出這個選定鄉鎮的鄉級河道(此鄉鎮的行政區編碼是“32108404”),然后再進行關聯。

Arcmap中的三個圖層
“鄉級河道polyline”圖層屬性表
“鄉級河道polygon”圖層屬性表
“GY鄉級河道”圖層屬性表  

 

方法步驟:

1. 編寫Arcpy腳本代碼,保存為Python文件。

 1 import arcpy
 2 from arcpy import env
 3 env.workspace="G:/GYcoor/GYCoor.gdb"
 4 
 5 line_table=arcpy.GetParameterAsText(0)
 6 polygon_table=arcpy.GetParameterAsText(1)
 7 gy_table=arcpy.GetParameterAsText(2)
 8 xzqbmVal=arcpy.GetParameterAsText(3)
 9 
10 arcpy.AddField_management(line_table,"NAME","TEXT")
11 arcpy.AddField_management(line_table,"TYBH","TEXT")
12 arcpy.AddField_management(line_table,"Xs","DOUBLE")
13 arcpy.AddField_management(line_table,"Ys","DOUBLE")
14 arcpy.AddField_management(line_table,"Xe","DOUBLE")
15 arcpy.AddField_management(line_table,"Ye","DOUBLE")
16 
17 arcpy.SelectLayerByAttribute_management(gy_table,"NEW_SELECTION","XZQBM='"+xzqbmVal+"'")
18 
19 arcpy.AddJoin_management(line_table,'id',polygon_table,'id',"KEEP_COMMON")
20 arcpy.CalculateField_management(line_table,'NAME',"!"+polygon_table+".NAME!","PYTHON")
21 arcpy.RemoveJoin_management(line_table)
22 
23 arcpy.AddJoin_management(line_table,'NAME',gy_table,'NAME',"KEEP_COMMON")
24 arcpy.CalculateField_management(line_table,'TYBH',"!"+gy_table+".TYBH!","PYTHON")
25 arcpy.RemoveJoin_management(line_table)
26 
27 arcpy.CalculateField_management(line_table,"Xs","!SHAPE.FIRSTPOINT.X!","PYTHON_9.3")
28 arcpy.CalculateField_management(line_table,"Ys","!SHAPE.FIRSTPOINT.Y!","PYTHON_9.3")
29 arcpy.CalculateField_management(line_table,"Xe","!SHAPE.LASTPOINT.X!","PYTHON_9.3")
30 arcpy.CalculateField_management(line_table,"Ye","!SHAPE.LASTPOINT.Y!","PYTHON_9.3")

 2. 在ArcMap工具箱中添加腳本,並做好相關設置。

3. 打開工具,輸入必要參數並運行腳本。

4. 工具執行成功,計算結果集中到“鄉級河道polyline”圖層中,該圖層的屬性表如下圖所示,導出該屬性表即可得到所需的表格。

 

遺留問題:

  ArcMap計算經緯度時的單位默認是“米”,而不是常規的“度”,但是因為在編寫Arcpy腳本過程中沒有找到正確的方式來指定所需的經緯度單位,所以還是采用了默認的單位“米”。補救方法是在工具執行成功后,在“鄉級河道polyline”圖層的屬性表中對4個經緯度字段再進行Calculate Geometry,重新計算得出符合要求的數值結果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM