ArcPy 是一個以成功的 ArcGISscripting 模塊為基礎并繼承了 arcgisscripting 功能進而構建而成的站點包。目的是為以實用高效的方式通過 python 執行地理數據分析、數據轉換、數據管理和地圖自動化創建基礎。
該包提供了豐富純正的 Python 體驗,具有代碼自動完成功能(輸入關鍵字和點即可獲得該關鍵字所支持的屬性和方法的彈出列表;從中選擇一個屬性或方法即可将其插入),并針對每個函數、模塊和類提供了參考文檔。
在 Python 中使用 ArcPy 的另一個主要原因是,Python 是一種通用的編程語言。Python 是一種支持動态輸入的解釋型語言,适用于交互式操作以及為稱為腳本的一次性程序快速制作原型,同時其具有編寫大型應用程序的強大功能。用 ArcPy 編寫的 ArcGIS 應用程序的優勢在于,可以使用由來自多個不同領域的 GIS 專業人員和程序員組成的衆多 Python 小群體開發的附加模塊。
上述藍色字體介紹部分來自ArcGIS的官方幫助說明,可以幫助大家了解ArcPy的來龍去脈。從幫助上看出,Arcpy可以做的幾項重要的工作,地理數據分析、數據轉換、數據管理和地圖自動化創建。其中,地理數據分析、數據轉換、數據管理都是toolbox的工具都可以實現,地圖自動化創建則是需要工具以外的東西,則需要開放更多的接口進行地圖的交互。
接下來可以看看ArcPy到底提供了哪些操作的接口。學習ArcPy最重要的還是使用Desktop的幫助,這個幫助基本上就是一個cookbook,所需要的都可以在幫助裡面找到,可以根據幫助看看那些操作能用,哪些不能用。
從幫助裡面可以看到ArcPy裡面設計到的功能部分,涉及到常規操作的一些函數、類、數據接入、制圖等,還有提供一些非工具調用的擴展模塊的特殊接口,這些接口都是交互性的接口。如果希望能夠完全使用python進行插件開發,那必須掌握工具的調用(也就是說知道哪些工具能實現什麼什麼功能),以及ArcPy的函數和類,與地圖交互部分,必須掌握Mapping模塊,因為該模塊涉及到地圖的交互操作。
ArcPy函數部分,基本上将AO常用的操作部分進行了封裝,而且調用相當簡介。可以看到遊标、字段、地理數據庫管理等的接口。
例如看搜索遊标的調用實例,相對與AO來說,簡直就是簡單到極緻,完全符合常規的思維模式。指定數據源,查找字段等就能查出結果。
import arcpy
fc = "c:/data/base.gdb/roads"
field = "StreetName"
cursor = arcpy.SearchCursor(fc)
for row in cursor:
print(row.getValue(field))
例如列出數據,非常簡介的調用,遍曆出各種數據的列表
調用也是非常簡單
import arcpy
# For each field in the Hospitals feature class, print
# the field name, type, and length.
fields = arcpy.ListFields("c:/data/municipal.gdb/hospitals")
for field in fields:
print("{0} is a type of {1} with a length of {2}"
.format(field.name, field.type, field.length))
從這兩個例子可以看出,ArcPy的設計都是以極簡思維去設計接口和函數的,盡可能符合人類思維模式,避免了像其他高級語言那樣嚴格的通過定義變量、變量類型等嚴格的操作。
再看涉及到的類型,一些常規的細粒度控制也做得相當不錯。哪怕是圖形的控制,都可以通過ArcPy來控制。
例如創建一個面,通過ArcPy隻需要幾行簡單的代碼,完成面要素創建并加入到已有的面圖層中
import arcpy
# A list of features and coordinate pairs
feature_info = [[[1, 2], [2, 4], [3, 7]],
[[6, 8], [5, 7], [7, 2], [9, 5]]]
# A list that will hold each of the Polygon objects
features = []
for feature in feature_info:
# Create a Polygon object based on the array of points
# Append to the list of Polygon objects
features.append(
arcpy.Polygon(
arcpy.Array([arcpy.Point(*coords) for coords in feature])))
# Persist a copy of the Polyline objects using CopyFeatures
arcpy.CopyFeatures_management(features, "c:/geometry/polygons.shp")
在制圖方面,同樣可以看到一些細粒度的控制,如涉及到地圖文檔控制、符号控制等
可以說,這些都是可以從各個細節地方去控制地圖,并做出一些交互操作。掌握了這些基本的函數和類,對于基本一定GIS基礎的開發人員來說,基本上可以制作出各種的插件了,避免使用AO去做長周期的開發。
個人認為,如果将ArcGIS插件式開發定義為使用ArcPy去開發的話,那就太局限了。因為python是一個優秀的語言,有着活躍的開發社區,有非常多的優秀算法和優秀的資源,可以通過python的模式而不是僅僅限于ArcPy去開發插件,這才能做出更加優秀的功能。
更多精彩内容,盡在51GIS學院
歡迎您關注我們官網和公衆号,獲取更多自然資源領域知識
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!