python调用arcpy函数_AGS Python开发-ArcPy开发基础
轉(zhuǎn)自
AGS Python開(kāi)發(fā)-ArcPy開(kāi)發(fā)基礎(chǔ)
1、Python與ArcGIS關(guān)系
ArcGIS提供了ArcPy包,Python是通過(guò)該ArcPy包來(lái)操作ArcGIS中的功能。ArcPy可以理解為ArcGIS針對(duì)Python語(yǔ)言提供的開(kāi)發(fā)API。
2、導(dǎo)入ArcPy與模塊搜索路徑
(1)導(dǎo)入ArcPy
示例1:import arcpy
示例2:import arcpy.mapping
示例3:from arcpy import env
示例4:from arcpy import env as ENV
(2)模塊搜索路徑
導(dǎo)入ArcPy時(shí),會(huì)先搜索PYTHONPATH環(huán)境變量。如何未定義環(huán)境變量,則搜索sys.path定義的路徑:Python27\ArcGIS10.5\Lib\site-packages和Python27\ArcGISx6410.5\Lib\site-packages。ArcGIS在安裝Python時(shí),會(huì)在這兩個(gè)目錄下創(chuàng)建Desktop10.5.pth和Server10.5.pth。這兩個(gè)文件記錄了ArcPy需要的路徑:
*C:\arcgis\Desktop10.5\bin
C:\arcgis\Desktop10.5\ArcPy
C:\arcgis\Desktop10.5\ArcToolBox\Scripts
?
如果出現(xiàn)提示找不到ArcPy模塊的錯(cuò)誤,可以手動(dòng)創(chuàng)建該文件并添加上面的路徑。
3、調(diào)用地理處理工具和地理處理服務(wù)
3.1、調(diào)用地理處理工具
所有工具可以ArcPy函數(shù)方式調(diào)用,也可以工具箱別名的模塊調(diào)用。
函數(shù)方式:arcpy.GetCount_management(features)
工具箱模塊方式:arcpy.management.GetCount(features)
3.2、調(diào)用自定義地理處理工具
建議在ImportToolbox()中定義自定義工具箱的別名,ArcPy使用arcpy._方式調(diào)用。
arcpy.ImportToolbox("c:/mytools/geometrytools.tbx", "mytools")
arcpy.CreateRegularPolygons_mytools(params)
3.3、調(diào)用地理處理服務(wù)
地理處理服務(wù)器名稱和工具箱名稱使用分號(hào)隔開(kāi)。
arcpy.ImportToolbox("http://flame7/arcgis/services;GP/BufferByVal","mytools")
arcpy.BufferPoints_mytools(inFeatureSet, "5 km")
3.4、調(diào)用地理處理工具的技巧
技巧1:調(diào)用ArcGIS自帶的地理處理工具
ArcGIS提供了數(shù)量眾多的地理處理工具,這些工具都可以通過(guò)ArcPy來(lái)調(diào)用。在調(diào)用地理處理工具時(shí),需要清楚工具的處理流程,以及輸入輸出參數(shù)等信息。為了方便調(diào)用與調(diào)試,可按如下步驟進(jìn)行:
1.在桌面軟件中運(yùn)行地理處理工具
在工具運(yùn)行窗口中可以查看工具說(shuō)明,以及相關(guān)參數(shù)設(shè)置要求。同時(shí)還可以測(cè)試輸入?yún)?shù)與輸出結(jié)果。
2.查看地理處理工具調(diào)用方式
方式1:在桌面軟件中,工具拖拉到Python命令行窗口,即可查看到工具調(diào)用名稱,以及相關(guān)參數(shù)設(shè)置要求。
方式2:調(diào)用help()方法查看工具調(diào)用文檔。在桌面軟件或者IDE環(huán)境中的Python命令行中,輸入help(arcpy.toolname)查詢。
方式3:直接查看桌面軟件幫助中的工具參考。在參考中還包含了示例代碼。
3.在Python中調(diào)用地理處理工具
根據(jù)地理處理工具調(diào)用要求,編寫(xiě)Python調(diào)用代碼。
技巧2:調(diào)用自定義的地理處理模型
對(duì)于自定義的地理處理模型,在Python中可以使用兩種調(diào)用方式:
1.直接調(diào)用
直接調(diào)用是將自定義處理模型當(dāng)作整理看待,調(diào)用方式:
arcpy.importToolbox("toolbox_path", "mytoolbox")
arcpy.Mytool_mytoolbox("params")
1.將模型導(dǎo)出為Python腳本,再?gòu)?fù)用腳本內(nèi)容
ArcGIS提供了自定義地理處理模型導(dǎo)出為Python腳本的功能,導(dǎo)出的腳本可以直接在python中使用,也可以在其上修改增加自定義的功能。
這種方式可以看作是可視化編碼方式,可以減少調(diào)用系統(tǒng)地理處理工具的復(fù)雜度。
4、ArcPy中的OMD
ArcPy由三大部分組成:ArcPy函數(shù)、ArcPy類、ArcPy模塊。
(1)ArcPy函數(shù)
ArcPy函數(shù)用于執(zhí)行特定的任務(wù),方便執(zhí)行地理處理工作流。ArcPy中的函數(shù)分為兩種:地理處理函數(shù)和非地理處理函數(shù)。所有地理處理工具都以地理處理函數(shù)提供。
(2)ArcPy類
ArcPy類存儲(chǔ)地理對(duì)象相關(guān)的信息,通常用于解析地理數(shù)據(jù),或者作為地理處理工具的參數(shù)。
(3)ArcPy模塊
ArcPy模塊是將共性的功能以模塊方式提供,方便調(diào)用。ArcPy模塊包括數(shù)據(jù)訪問(wèn)模塊(arcpy.da)、制圖模塊(arcpy.mapping)、空間分析擴(kuò)展模塊(arcpy.sa)、網(wǎng)絡(luò)分析擴(kuò)展模塊(arcpy.na)。以及工具類模塊:時(shí)間模塊(arcpy.time)。
4.1、ArcPy中的函數(shù)
ArcPy中的函數(shù)主要包括了:描述數(shù)據(jù)的函數(shù)(Describe)、判斷數(shù)據(jù)是否存在的函數(shù)(Exists)、數(shù)據(jù)迭代相關(guān)的函數(shù)(如:ListFields)、外部輸入?yún)?shù)相關(guān)的函數(shù)(如GetParameterAsText)、許可檢查相關(guān)的函數(shù)(如CheckExtension)、環(huán)境設(shè)置相關(guān)的函數(shù)(如GetSystemEnvironment)、消息錯(cuò)誤處理相關(guān)的函數(shù)(如GetMessage)
詳情參見(jiàn):http://desktop.arcgis.com/zh-cn/arcmap/latest/analyze/arcpy-functions/alphabetical-list-of-arcpy-functions.htm
4.2、ArcPy中的類
分類主要類說(shuō)明
要素類或表、柵格類FeatureSet、RecordSet、Raster代表要素圖層或者表、柵格圖層
要素?cái)?shù)據(jù)內(nèi)容相關(guān)類Cursor、Row代表要素圖層或者表中記錄的每行數(shù)據(jù)
要素圖層字段相關(guān)類Field、FieldInfo代表要素圖層或表的字段信息
幾何類型與空間參考Point、Multipoint、PointGeometry、Polyline、Polygon、Extent、SpatialReference
圖表類Graph、GraphTemplate如:氣泡圖、直方圖、餅圖等
ToolValidator相關(guān)類Filter、Parameter、Schema、Value自定義Python工具箱所需要的參數(shù)類
異常類ExecuteError、ExecuteWarning
其他核心類環(huán)境設(shè)置類:env;地理處理結(jié)果類:Result;索引類(空間索引和屬性索引):Index;多值參數(shù)類:ValueTable;SDE SQL操作類:ArcSDESQLExecute;輔助類:Array、RandomNumberGenerator
4.3、ArcPy中的模塊
模塊名稱主要功能
arcpy.da數(shù)據(jù)訪問(wèn)模塊。提供了增、刪、查、改數(shù)據(jù)的類和函數(shù)。
arcpy.mapping地圖制圖模塊。提供了操作mxd文檔、地圖渲染、地圖打印輸出、地圖服務(wù)發(fā)布等功能。
arcpy.na網(wǎng)絡(luò)分析擴(kuò)展模塊。用于訪問(wèn)網(wǎng)絡(luò)分析地理處理工具。
arcpy.sa柵格分析模塊。用于訪問(wèn)空間分析地理處理工具。
5、描述數(shù)據(jù)的函數(shù)
通過(guò)Describe函數(shù)可以查詢所有類型數(shù)據(jù)的屬性信息。如:數(shù)據(jù)幾何類型、字段、索引等。不同的數(shù)據(jù)類型可查詢的屬性信息不同。
ftClass="D:/mapdata/test/china/chinamap.gdb/citiesbuffer"
ftDesc = arcpy.Describe(ftClass)
print(ftDesc.shapeType)
print(ftDesc.featureType)
print(ftDesc.shapeFieldName)
print(ftDesc.OIDFieldName)
print(len(ftDesc.fields))
print(ftDesc.spatialReference.name)
6、環(huán)境設(shè)置類
ArcPy中環(huán)境設(shè)置定義在env類中。
(1)環(huán)境設(shè)置讀取和更改
arcpy.env.scratchWorkspace = "c:/mapdata"
arcpy.env.workspace = "c:/mapdata"
arcpy.env.XYTolerance = 2.5
workspace = arcpy.env.scratchGDB
(2)檢查環(huán)境變量名稱
arcpy.ListEnvironments()
(3)重設(shè)環(huán)境設(shè)置
arcpy.ResetEnvironments()
arcpy.ClearEnvironment("workspace")
7、消息處理
(1)讀取消息
在地理處理工具執(zhí)行過(guò)程中,會(huì)輸出處理消息,消息內(nèi)容包括:時(shí)間、參數(shù)、錯(cuò)誤等。可通過(guò)如下方式獲取:
方式1:直接讀取
result=arcpy.GetCount_management("D:/mapdata/test/worldshp/cities.shp")
print(arcpy.GetMessageCount())
print(arcpy.GetMessages())
print(arcpy.GetMessage(0))
方式2:從result中讀取
result=arcpy.GetCount_management("D:/mapdata/test/worldshp/cities.shp")
print(result.messageCount)
print(result.getMessage(0))
print(result.getMessages(2))
(2)自定義消息
如果是控制臺(tái)輸出,可以直接使用print語(yǔ)句,也可以使用ArcPy提供的消息函數(shù):
arcpy.AddMessage("info")
arcpy.AddWarning("warning")
arcpy.AddError("error")
8、錯(cuò)誤處理
(1)ExecuteError類
地理處理工具失敗時(shí)會(huì)拋出arcpy.ExecuteError類。其他的異常可以使用sys.exc_info()獲取。
import arcpy
import sys
try:
result = arcpy.GetCount_management("c:/erro.shp")
except arcpy.ExecuteError:
arcpy.AddError(arcpy.GetMessages(2))
except:
e = sys.exc_info()[1]
print(e.args[0])
(2)錯(cuò)誤跟蹤
在較大復(fù)雜的腳本中,可結(jié)合sys和traceback模塊來(lái)查找跟蹤錯(cuò)誤。
import arcpy
import sys
import traceback
arcpy.env.workspace = "C:/Data/myData.gdb"
try:
arcpy.CreateSpatialReference_management()
except arcpy.ExecuteError:
msgs = arcpy.GetMessages(2)
print(msgs)
except:
# Get the traceback object
#
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages(2) + "\n"
print(pymsg)
print(msgs)
(3)Result對(duì)象中獲取錯(cuò)誤消息
result = arcpy.Clip_analysis("roads", "urban_area", "urban_roads")
消息總數(shù):result.messageCount
按索引號(hào)獲取消息:result.getMessage(index)
按類型獲取消息:result.getMessages(severity)
消息類型分:0(消息)、1(警告)、2(錯(cuò)誤)
9、許可檢查
使用arcpy.CheckExtension("3D")和arcpy.CheckOutExtension("3D")檢查許可。
import arcpy
try:
if arcpy.CheckExtension("3D") == "Available":
arcpy.CheckOutExtension("3D")
else:
print("license error")
arcpy.env.workspace = "D:/GrosMorne"
arcpy.HillShade_3d("WesternBrook", "westbrook_hill", 300)
arcpy.Aspect_3d("WesternBrook", "westbrook_aspect")
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
finally:
arcpy.CheckInExtension("3D")
10、地理數(shù)據(jù)路徑設(shè)置與中文處理
(1)路徑設(shè)置
在訪問(wèn)本地?cái)?shù)據(jù)時(shí),常需要設(shè)置數(shù)據(jù)存放路徑,設(shè)置方式有兩種:
方式1:絕對(duì)路徑。
直接將絕對(duì)路徑傳入地理處理工具函數(shù)中。
arcpy.GetCount_management(r"c:\temp\streams.shp")
總結(jié)
以上是生活随笔為你收集整理的python调用arcpy函数_AGS Python开发-ArcPy开发基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机组装与维护实训1,计算机组装与维护
- 下一篇: 实验3 编程、编译、链接、跟踪