Python 是一种通用的开源编程语言,在 ArcGIS 地理处理中用作脚本语言。通过导入 ArcGIS 软件的 ArcPy 站点包可以使用 Python 访问地理处理功能。利用 ArcPy 可访问地理处理工具和其他函数、类和模块,使用它们可快速轻松地创建简单或复杂工作流。
使用以 ArcPy 编写的 ArcGIS 应用程序和脚本的优势在于,可以访问并使用由来自多个不同领域的 GIS 专业人员和程序员开发的大量 Python 模块。使用 Python 中 ArcPy 的另一个主要原因是,Python 是一种通用的编程语言,易于学习和使用。通过解释和动态输入这种编程语言,用户可以在交互式环境中快速地创建脚本原型并进行测试,同时这种编程语言功能强大,可编写大型应用程序。
一般来说,ArcPy 按工具、环境、函数、类和模块进行组织。
运行工具
以下示例显示了如何执行缓冲区工具。执行该工具时,消息将默认显示在帮助部分中 Python 窗口的右侧。
>>> arcpy.Buffer_analysis("c:/data/Portland.gdb/streets", "c:/data/Portland.gdb/steets_buffer", "500 METERS")
以下是另一个有关运行工具的示例。该示例使用的是数据管理工具箱和转换工具箱中的工具。向输入 streets 要素类添加一个字段并计算该字段,然后将要素类加载到企业级地理数据库中。
>>> import arcpy
>>> arcpy.AddField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "TEXT")
>>> arcpy.CalculateField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "!shape.length@miles!", "PYTHON_9.3")
>>> arcpy.FeatureClassToFeatureClass_conversion("c:/data/Portland.gdb/streets", "Database Connections/MySDE.sde/PortlandDataset", "streets")
从工具获取结果
执行地理处理工具时,工具的结果会返回到 Result 对象中。通常,该对象是由工具生成或更新的输出数据集的路径。在其他情况下,它可能会包含其他类型的值,如数值或布尔值。如果工具的输出是多值参数,则这些值可在列表中以列表的形式返回。
以下代码示例显示了如何捕获返回值以及这些值的具体内容:
返回输出要素类的路径。该结果可用作其他函数的输入。
>>> result = arcpy.Buffer_analysis("rivers", "riverBuf", "50 METERS")
>>> print result
C:\Portland\Portland_OR.gdb\riverBuf
>>> arcpy.Clip_analysis("streets", result, "streets_50m_of_rivers")
返回要素数目。
>>> result = arcpy.GetCount_management("streets_50m_of_rivers")
>>> print result.getOutput(0)
54
返回要素类的默认空间格网索引列表。
>>> result = arcpy.CalculateDefaultGridIndex_management("streets_50m_of_rivers")
>>> for i in range(0, result.outputCount):
... print result.getOutput(i)
...
560
200
0
使用环境设置
可将地理处理环境设置视为影响工具执行结果的附加参数。这些参数与正常的工具参数不同,因为它们是通过工具单独进行设置的,并且供工具在运行时查询和使用。诸如感兴趣区域、输出数据集的坐标系以及新栅格数据集的像元大小等环境设置均可通过工具进行指定和支持。
可通过 env 类来获得属性形式的环境设置。这些属性可用于检索和设置当前环境值。下面是如何使用环境值的示例:
设置工作空间环境。
>>> arcpy.env.workspace = "c:/data/Portland.gdb"
>>> arcpy.Buffer_analysis("streets", "streetBuf", "500 METERS")
将空间格网索引设置为工具的返回值。
>>> arcpy.env.spatialGrid1 = arcpy.CalculateDefaultSpatialGridIndex_management("streets").getOutput(0)
获取当前栅格像元大小设置并确保其为标准输出的指定大小。
if arcpy.env.cellSize != 30:
arcpy.env.cellSize = 30
使用函数
函数是用于执行某项特定任务并能够纳入更大的程序的已定义功能。除工具之外,ArcPy 还提供了多种函数,用来更好地支持地理处理工作流。函数可用于列出某些数据集、检索数据集的属性、检查数据是否存在、在将表添加到地理数据库之前验证表名称,或执行其他许多有用的脚本任务。
以下示例代码显示的是获得数据的属性并检出扩展模块:
import arcpy
# prints True
print arcpy.Exists("c:/data/Portland.gdb/streets")
# prints NAD_1983_StatePlane_Oregon_North_FIPS_3601_Feet
sr = arcpy.Describe("c:/data/Portland.gdb/streets").spatialReference
print sr.name
# prints Available
print arcpy.CheckExtension("spatial")
arcpy.CheckOutExtension("spatial")
使用类
ArcPy 类,如 SpatialReference 和 Extent 类,通常用作地理处理工具参数设置的快捷方式,否则的话,这些参数会使用更加复杂的字符串。类的作用类似于建筑设计蓝图。蓝图为如何创建事物提供了一个框架,而类则可用来创建对象,即通常所称的实例。
import arcpy
spatial_ref = arcpy.SpatialReference("Hawaii Albers Equal Area Conic")
使用模块
ArcPy 包含涉及其他 ArcGIS 领域的模块。ArcPy 由一系列模块支持,包括数据访问模块 (arcpy.da)、制图模块 (arcpy.mapping)、ArcGIS Spatial Analyst 模块 (arcpy.sa) 以及 ArcGIS Network Analyst 模块 (arcpy.na)。
例如,arcpy.sa 模块中的工具将使用 Spatial Analyst 工具箱中的工具,但被配置为支持“地图代数”。因此,执行 arcpy.sa.Slope 与执行 Spatial Analyst 工具箱中的坡度工具的作用是相同的。