tft每日頭條

 > 圖文

 > arcgis python 代碼調試

arcgis python 代碼調試

圖文 更新时间:2025-02-02 11:02:04

arcgis python 代碼調試(使用python制作ArcGIS插件第三期)1

ArcPy 是一個以成功的 ArcGISscripting 模塊為基礎并繼承了 arcgisscripting 功能進而構建而成的站點包。目的是為以實用高效的方式通過 python 執行地理數據分析、數據轉換、數據管理和地圖自動化創建基礎。

該包提供了豐富純正的 Python 體驗,具有代碼自動完成功能(輸入關鍵字和點即可獲得該關鍵字所支持的屬性和方法的彈出列表;從中選擇一個屬性或方法即可将其插入),并針對每個函數、模塊和類提供了參考文檔。

在 Python 中使用 ArcPy 的另一個主要原因是,Python 是一種通用的編程語言。Python 是一種支持動态輸入的解釋型語言,适用于交互式操作以及為稱為腳本的一次性程序快速制作原型,同時其具有編寫大型應用程序的強大功能。用 ArcPy 編寫的 ArcGIS 應用程序的優勢在于,可以使用由來自多個不同領域的 GIS 專業人員和程序員組成的衆多 Python 小群體開發的附加模塊。

上述藍色字體介紹部分來自ArcGIS的官方幫助說明,可以幫助大家了解ArcPy的來龍去脈。從幫助上看出,Arcpy可以做的幾項重要的工作,地理數據分析、數據轉換、數據管理和地圖自動化創建。其中,地理數據分析、數據轉換、數據管理都是toolbox的工具都可以實現,地圖自動化創建則是需要工具以外的東西,則需要開放更多的接口進行地圖的交互。

接下來可以看看ArcPy到底提供了哪些操作的接口。學習ArcPy最重要的還是使用Desktop的幫助,這個幫助基本上就是一個cookbook,所需要的都可以在幫助裡面找到,可以根據幫助看看那些操作能用,哪些不能用。

arcgis python 代碼調試(使用python制作ArcGIS插件第三期)2

從幫助裡面可以看到ArcPy裡面設計到的功能部分,涉及到常規操作的一些函數、類、數據接入、制圖等,還有提供一些非工具調用的擴展模塊的特殊接口,這些接口都是交互性的接口。如果希望能夠完全使用python進行插件開發,那必須掌握工具的調用(也就是說知道哪些工具能實現什麼什麼功能),以及ArcPy的函數和類,與地圖交互部分,必須掌握Mapping模塊,因為該模塊涉及到地圖的交互操作。

ArcPy函數部分,基本上将AO常用的操作部分進行了封裝,而且調用相當簡介。可以看到遊标、字段、地理數據庫管理等的接口。

arcgis python 代碼調試(使用python制作ArcGIS插件第三期)3

例如看搜索遊标的調用實例,相對與AO來說,簡直就是簡單到極緻,完全符合常規的思維模式。指定數據源,查找字段等就能查出結果。

import arcpy

fc = "c:/data/base.gdb/roads"

field = "StreetName"

cursor = arcpy.SearchCursor(fc)

for row in cursor:

print(row.getValue(field))

例如列出數據,非常簡介的調用,遍曆出各種數據的列表

arcgis python 代碼調試(使用python制作ArcGIS插件第三期)4

調用也是非常簡單

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來控制。

arcgis python 代碼調試(使用python制作ArcGIS插件第三期)5

例如創建一個面,通過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")

在制圖方面,同樣可以看到一些細粒度的控制,如涉及到地圖文檔控制、符号控制等

arcgis python 代碼調試(使用python制作ArcGIS插件第三期)6

可以說,這些都是可以從各個細節地方去控制地圖,并做出一些交互操作。掌握了這些基本的函數和類,對于基本一定GIS基礎的開發人員來說,基本上可以制作出各種的插件了,避免使用AO去做長周期的開發。

個人認為,如果将ArcGIS插件式開發定義為使用ArcPy去開發的話,那就太局限了。因為python是一個優秀的語言,有着活躍的開發社區,有非常多的優秀算法和優秀的資源,可以通過python的模式而不是僅僅限于ArcPy去開發插件,這才能做出更加優秀的功能。

更多精彩内容,盡在51GIS學院

歡迎您關注我們官網和公衆号,獲取更多自然資源領域知識

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved