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")
输出结果:
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']