ArcPy 由一系列模块支持,包括数据访问模块 (arcpy.da)、制图模块 (arcpy.mapping)、ArcGIS Spatial Analyst 扩展模块 模块 (arcpy.sa) 以及 ArcGIS Network Analyst 扩展模块 (arcpy.na)。
1、路径
Python将反斜线 (\) 用作转义字符。例如,\n 表示换行符,\t 表示制表符。指定路径时,可使用正斜线 (/) 代替反斜线。使用两条反斜线(而不是一条)以避免语法错误。也可通过在包含反斜线的字符串前放置字母 r(以便正确解释)来使用字符串文本。
import arcpy arcpy.GetCount_management("E:/pythondata/shengdao.shp") arcpy.GetCount_management("E:\\pythondata\\shengdao.shp") arcpy.GetCount_management(r"E:\pythondata\shengdao.shp")
输出结果:
<Result '1509'>
2、可选参数
--添加字段
# 将可选参数设置为一组空双引号 ("") arcpy.AddField_management("c:/data/streets.shp", "Address", "TEXT", "", "", 120) # 将可选参数设置为带双引号的井号 ("#") arcpy.AddField_management("c:/data/streets.shp", "Address", "TEXT", "#", "#", 120) # 明确指定要使用的参数名称及其值(忽略除已命名参数以外的所有参数) arcpy.AddField_management("c:/data/streets.shp", "Address", "TEXT", field_length=120)
可选参数具有默认值。如果为可选参数输入带引号的 #(井号)、""(一对双引号)、''(一对单引号)或者 Python None,将会使用默认参数值。
3、多值参数
工具参数可接受单个值或多个值,这取决于参数本身。当可接受多个值时,参数值可指定为一个 Python 列表。
--***字段工具可接受多个要***的字段。
arcpy.DeleteField_management("E:/pythondata/shengdao.shp",["Address","Address1"])
--联合(Union)
arcpy.env.workspace=r"E:\pythondata\FileGDB.gdb\MyFeatureSet"input_list = [["mian", 1], ["feature", 2]] arcpy.Union_analysis(input_list,r"E:\pythondata\FileGDB.gdb\MyFeatureSet\union3")
参数约定,一般来说:
(1)所有输入数据集的参数名都带有前缀 in_,而所有输出数据集的参数名都带有前缀 out_。
(2)输入数据集通常为第一个参数,输出数据集通常为最后一个必需参数。其他必需参数位于输入和输出数据集之间。
(3)可选参数始终位于必需参数之后。
4、设置环境
在 ArcPy 中,地理处理环境被组织为 ArcPy 类 env 下的属性。
>>> print arcpy.env.overwriteOutput False >>> print arcpy.env.workspace C:\Users\Admin\Documents\ArcGIS\Default.gdb >>> arcpy.env.workspace = "E:\pythondata">>> arcpy.env.overwriteOutput = True >>> print arcpy.env.overwriteOutput True >>> print arcpy.env.workspace E:\pythondata
ArcPy 函数 ResetEnvironments 可用于恢复默认环境值。
>>> print arcpy.env.workspace E:\pythondata >>> arcpy.ResetEnvironments() >>> print arcpy.env.workspace C:\Users\Admin\Documents\ArcGIS\Default.gdb
ArcPy 函数 ListEnvironments 可用于创建所有地理处理环境的列表。该列表可用于访问并输出所有环境及其当前值。
environments = arcpy.ListEnvironments()for environment in environments: envSetting = eval("arcpy.env." + environment) print "%-30s: %s" % (environment, envSetting)
输出结果:
newPrecision : SINGLE autoCommit : 1000 XYResolution : None XYDomain : None scratchWorkspace : None cartographicPartitions : None terrainMemoryUsage : False MTolerance : None compression : LZ77 coincidentPoints : MEAN randomGenerator : 0 ACM599 outputCoordinateSystem : None rasterStatistics : STATISTICS 1 1 ZDomain : None transferDomains : False resamplingMethod : NEAREST snapRaster : None projectCompare : NONE cartographicCoordinateSystem : None configKeyword : None outputZFlag : Same As Input qualifiedFieldNames : True tileSize : 128 128 parallelProcessingFactor : None pyramid : PYRAMIDS -1 NEAREST DEFAULT 75 NO_SKIP referenceScale : None extent : None XYTolerance : None tinSaveVersion : CURRENT nodata : NONE MDomain : None spatialGrid1 : 0.0 cellSize : MAXOF outputZValue : None outputMFlag : Same As Input geographicTransformations : None spatialGrid2 : 0.0 ZResolution : None mask : None spatialGrid3 : 0.0 maintainSpatialIndex : False workspace : None MResolution : None derivedPrecision : HIGHEST ZTolerance : None scratchGDB : C:\Users\Admin\AppData\Local\Temp\scratch.gdb scratchFolder : C:\Users\Admin\AppData\Local\Temp\scratch packageWorkspace : None addOutputsToMap : True
--设置工作空间环境
>>> arcpy.env.workspace = "c:/data/Portland.gdb"
>>> arcpy.Buffer_analysis("streets", "streetBuf", "500 METERS")
5、创建工作流
--用于检索要素类和字段并生成字段值的唯一列表
import arcpyfeatureclass = r"E:\pythondata\FileGDB.gdb\shengdao"field = "KIND"valueList = [] rows = arcpy.da.SearchCursor(featureclass, [field])for row in rows: valueList.append(row[0])uniqueSet = set(valueList) uniqueList = list(uniqueSet) uniqueList.sort() print(uniqueList)
--用 ListFeatureClasses 函数生成工作空间中的所有要素类的列表,然后使用 GetCount 工具输出该列表中的各个要素类中包含的要素数。
输出结果:
bianjie.shp,1
gaosu.shp,1158
guodao.shp,840
shengdao.shp,1509
xian.shp,8
--用创建要素类工具基于该对象创建包含该指定空间参考的新要素类rivers.shp。
inputWorkspace = r"E:\pythondata"outputName = "rivers.shp"spatialRef = arcpy.SpatialReference(4326) arcpy.CreateFeatureclass_management(inputWorkspace,outputName,"POLYLINE","","","",spatialRef)
6、创建函数
在 Python 中,定义函数的方法是使用 Python 的 def 关键字后接函数名和参数列表。
--创建函数 listFieldName,返回某一个表或要素类的字段名称列表 def listFieldNames(table, wildcard=None, fieldtype=None): fields = arcpy.ListFields(table, wildcard, fieldtype) nameList = []for field in fields: nameList.append(field.name)return nameList --调用函数 fieldNames = listFieldNames(r"E:\pythondata\shengdao.shp")
输出结果:
[u'FID', u'Shape', u'OBJECTID', u'NAME', u'KIND', u'Shape_Leng', u'Address3']
本文出自 “IT技术学习与交流” 博客,谢绝转载!