在 Python 中使用工具

每个地理处理工具都具有一组固定的参数,这些参数为工具提供实施所需的信息。 工具通常包含多个输入参数以定义一个或多个数据集,这些数据集一般用于生成新的输出数据。 参数具有几个重要属性:

  • 每个参数具有一种或多种特定的数据类型,如要素类、整型、字符串或栅格。
  • 参数可为输入值或输出值。
  • 参数要么需要输入某一值,要么是可选项。
  • 每个工具参数都具有一个唯一名称。

Python 中使用工具时,必须正确设置其参数值才能成功运行。 提供一组有效的参数值后,工具即准备就绪,可以运行。 参数将被指定为字符串或对象。

字符串是唯一标识参数值的文本,如数据集的路径或关键字。 在下面的代码示例中,为缓冲区工具定义了输入和输出参数。 请注意,工具名称要追加其工具箱的别名。 在该示例中,两个字符串变量用于定义输入和输出参数,以便对工具的调用更容易阅读。

import arcpy

roads = "c:/base/data.gdb/roads"
output = "c:/base/data.gdb/roads_Buffer"

# Run Buffer using the variables set above and pass the remaining 
# parameters in as strings
arcpy.analysis.Buffer(roads, output, "distance", "FULL", "ROUND", "NONE")

对于部分参数(如空间参考),还可以指定对象。 在下面的代码示例中,使用其可选坐标系参数的 SpatialReference 对象运行创建要素类工具。

import arcpy

in_workspace = "c:/temp"
output_name = "rivers.shp"

# Create a spatial reference object
spatial_ref = arcpy.SpatialReference('North America Equidistant Conic')

# Run CreateFeatureclass using the spatial reference object
arcpy.management.CreateFeatureclass(
    in_workspace, output_name, spatial_reference=spatial_ref)

大部分地理处理工具同时包含必选参数和可选参数。 通常,在许多情况下都存在多个不需要进行指定的可选参数。 有两种方法可以处理这些未使用的参数。 一种方法是保持所有可选参数有序,然后将您不需要的参数引用为空字符串 ""、井号 "#" 或类型为 None 的参数。 另一种方法是使用关键字参数,并使用参数名称来分配值。 使用关键字参数可以跳过未使用的可选参数或以不同的顺序指定它们。

使用空字符串跳过可选参数。

import arcpy
arcpy.management.AddField("schools", "school_id", "LONG", "", "", "", "", "NON_NULLABLE")

更好的办法是使用关键字参数跳过可选参数。

import arcpy
arcpy.management.AddField("schools", "school_id", "LONG", field_is_nullable="NON_NULLABLE")

工具输出

当 ArcPy 运行并作为 Result 对象返回时,其将返回工具的输出值。 运行完成后,Result 对象将保留有关工具操作的信息。 其中包括消息、参数和输出。 arcpy.GetMessages 等函数仅提供来自前面工具的信息。 但即使在运行其他工具后,您仍可保留 Result 对象。

以下示例展示了如何在地理处理工具运行后从结果对象获取输出。

import arcpy

arcpy.env.workspace = "c:/city/data.gdb"

# Geoprocessing tools return a result object of the derived output dataset. 
result = arcpy.management.CopyFeatures("roads", "urban_roads")

# Using print function will display the string representation of the output.
print(result)

# A Result object can be indexed to get the output value. Note: a Result object 
# also has a getOutput() method that can be used for the same purpose.
result_value = result[0]

您可以使用 getOutputPython 索引对结果对象进行索引。 索引可以是参数的整型索引,也可以是参数的名称。 如果为结果对象建立索引或使用其 getOutput 方法,那么返回值为字符串。 当使用派生输出参数运行诸如获取计数(提供表中的记录数)或计算默认拓扑容差(提供拓扑容差值)之类的工具时,需要重点考虑这一点。 要转换为所需类型,可使用 intfloat 等内置 Python 函数。

注:

派生参数不需要用户的交互,并且不会在工具对话框上或作为 Python 中的工具的参数出现。 输出参数通常是“派生”类型。

import arcpy
import types

arcpy.env.workspace = "c:/base/data.gdb"

# Many geoprocessing tools return a result object of the derived output dataset.
result = arcpy.management.GetCount("roads")
result_value = result[0]

# The result object's getOutput method returns values as a unicode string. To 
# convert to a different Python type, use built-in Python functions: str(), 
# int(), float()
count = int(result_value)
print(count)
print(type(count))

创建中间输出时,将忽略工具的输出参数。 该工具将为输出创建一个唯一的路径和名称。 将输出设置为 "#"None 值,或如果输出是所使用的最后一个参数,则可以完全跳过此操作。

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"

result1 = arcpy.management.CopyFeatures("roads", "#")
result2 = arcpy.management.CopyFeatures("roads", "")
result3 = arcpy.management.CopyFeatures("roads")

工具组织

ArcPy 通过两种方式提供对地理处理工具的访问:

  • 作为直接来自 arcpy 的函数
  • 作为工具箱模块中的函数

这两种方法同样有效。 使用哪一种方法具体取决于个人喜好和编码习惯。 在以下示例中,获取计数工具使用了这两种方法。

import arcpy

in_features = "c:/temp/rivers.shp"

# Tools can be accessed from modules matching the toolbox name
arcpy.management.GetCount(in_features)

# Tools can be accessed as functions on the arcpy module
arcpy.GetCount_management(in_features)

使用模块中的工具时,有时您可能希望引起人们对模块的注意。 在这种情况下,使用导入表单 from - import - as

# Clean up street centerlines that were digitized without
# having set proper snapping environments

import arcpy
from arcpy import edit as EDIT
from arcpy import management as DM

streets = "c:/data/streets.gdb/majorrds"
streets_copy = "c:/output/Output.gdb/streetsBackup"

DM.CopyFeatures(streets, streets_copy)
EDIT.TrimLine(streets, "10 Feet", "KEEP_SHORT")
EDIT.ExtendLine(streets, "15 Feet", "EXTENSION")
许可:

为适应地图代数Spatial AnalystImage Analyst 工具的组织方式有所不同,这些工具只能通过 arcpy.saarcpy.ia 模块调用,而不以 ArcPy 函数的形式提供。


在本主题中
  1. 工具输出
  2. 工具组织