使用 Python 窗口创建工作流
通过 ArcPy 站点包,Python 窗口支持执行数百种地理处理工具。您可以执行单个工具,也可以按特定顺序依次执行多个工具。Python 窗口还允许您通过 ArcPy 访问支持更复杂 Python 工作流的许多函数和类。
支持 Python 工作流的函数包括多种用于执行任务的方法,例如创建某些数据类型的列表、检索某一数据集的属性、在将表添加至地理数据库前验证表名称或执行其他许多有用的脚本函数。
以下代码示例用 ListFeatureClasses 函数生成工作空间中的所有要素类的列表,然后使用 GetCount 工具输出该列表中的各个要素类中包含的要素数。
>>> arcpy.env.workspace = "c:/data"
>>> for fc in arcpy.ListFeatureClasses():
... print("{0}, {1}".format(fc, arcpy.GetCount_management(fc)))
空间参考、字段映射及字段和索引这样的类则可用于创建可与其他地理处理工具或函数结合使用的对象。
例如,在 Python 中,要指定某一空间参考的所有详细属性既耗费时间也不切实际。通过使用 SpatialReference 类,则可以快速完成 SpatialReference 对象的属性,并将该对象用作地理处理工具的输入。以下代码示例用北美等距圆锥投影的属性填充了 SpatialReference 对象;然后用创建要素类工具基于该对象创建包含该指定空间参考的新要素类。
import arcpy
inputWorkspace = "c:/temp"
outputName = "rivers.shp"
spatialRef = arcpy.SpatialReference("North America Equidistant Conic")
arcpy.CreateFeatureclass_management(inputWorkspace, outputName, "POLYLINE", "", "", "", spatialRef)
创建函数
函数是用于执行特定任务的小代码块,可用在更细化的工作流中。创建函数后,即可反复使用该函数,省去了重复编写相同任务的麻烦。
def listFieldNames(table, wildcard=None, fieldtype=None):
fields = arcpy.ListFields(table, wildcard, fieldtype)
nameList = []
for field in fields:
nameList.append(field.name)
return nameList
在 Python 中,定义函数的方法是使用 Python 的 def 关键字后接函数名和参数列表。上面的函数 listFieldNames 是一个短函数,它可返回某一个表或要素类的字段名称列表。其中的 return 语句用于从函数中返回值。
>>> fieldNames = listFieldNames("c:/data/water.gdb/water_pipes")
然而,如果您的工作需要您经常创建函数,则应该考虑编写一个脚本工具。从编写代码片段到编写自己的函数再到编写地理处理脚本工具,这是一个自然而然的渐进过程。了解有关创建自定义脚本工具的详细信息。