通过 Python 使用工具

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

名称

每个工具参数都具有一个唯一名称。

类型

所需数据的类型,如要素类、整型、字符串或栅格。

方向

该参数定义的是输入值还是输出值。

必填信息

表示参数值必须提供还是参数为可选。

在脚本中使用工具时,必须正确设置工具的参数值,以便在脚本运行时工具可以执行。每个工具的文档都明确定义了其参数和属性。一旦提供了一组有效的参数值,工具即准备好执行。

参数将被指定为字符串或对象。字符串是唯一标识参数值的简单文本,如数据集的路径或关键字。

大多数工具参数都可以简单字符串的形式指定。对于某些参数(如空间参考),可使用对象,而不是字符串。在下面的代码示例中,为缓冲区工具定义了输入和输出参数。请注意,工具名称始终要追加其工具箱的别名。在该示例中,两个字符串变量用于定义输入和输出参数,以便对工具的调用更容易阅读。

import arcpy

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

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

在下面的代码示例中,CreateFeatureClass 工具使用其可选“坐标系”参数的空间参考对象执行。空间参考对象使用 SpatialReference 类创建,其信息从投影文件中加载。

import arcpy

inputWorkspace = "c:/temp"
outputName =  "rivers.shp"

# Create a spatial reference object
#
spatialRef = arcpy.SpatialReference()

# Use a projection file to define the spatial reference's properties
#
spatialRef.createFromFile("c:/program files/arcgis/Desktop10.1/Coordinate Systems/" + \
                          "Projected Coordinate Systems/Continental/North America/North America Equidistant Conic.prj")

# Run CreateFeatureclass using the spatial reference object
#
arcpy.CreateFeatureclass_management(inputWorkspace, outputName, 
                                    "POLYLINE", "", "", "", spatialRef)

工具组织

地理处理工具以两种不同的方法进行组织。所有工具均以 ArcPy 函数的形式提供,但也可以通过匹配工具箱别名的模块调用。尽管帮助中的大多数示例都以 ArcPy 函数的形式显示工具,但两种方法同样有效。使用哪一种方法具体取决于个人喜好和编码习惯。在下面的示例中,使用两种方法显示 GetCount 工具。

import arcpy

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

# Tools can be accessed as functions on the arcpy module, and
#  from modules matching the toolbox name.
#
arcpy.GetCount_management(inFeatures)
arcpy.management.GetCount(inFeatures)

通过模块使用工具时,您有时可能要注意标识模块的方式,以便脚本具有更好的可读性。在这种情况下,可以使用 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"
streetsCopy = "c:/output/Output.gdb/streetsBackup"

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

为适应于“地图代数”,ArcGIS Spatial Analyst 扩展模块工具的处理方式有所不同,这些工具只能通过 arcpy.sa 模块调用,而不以 ArcPy 函数的形式提供。

从工具获取结果

当作为结果对象执行时,ArcPy 会返回工具的输出值。结果对象的优点是可以保留工具执行的相关信息,包括消息、参数和输出。即使在运行了多个其他工具后仍可保留这些结果。

下面的示例说明了如何在执行地理处理工具后获取结果对象的输出。

import arcpy

arcpy.env.workspace = "D:/St_Johns/data.gdb"

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

# A print statement will display the string 
#   representation of the output.
#
print result 

# To get the output value, the result object has a getOutput method
#
resultValue = result.getOutput(0)

注注:

结果对象的 getOutput 方法会返回一个 Unicode 字符串,来表示含有输出值的结果对象。当使用派生输出参数运行诸如 GetCount(提供表中的记录数)或 CalculateDefaultClusterTolerance(提供拓扑容差值)之类的工具时,需要重点考虑这一点。要将值转换为所需类型,需要使用内置 Python 函数(如 int()float())从 Unicode 字符串进行转换。

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

import arcpy
from arcpy import env
import types

env.workspace = "c:/St_Johns/data.gdb"

# Many geoprocessing tools return a result object of the derived 
#   output dataset. A print statement will display the string 
#   representation of the output.
#
result = arcpy.GetCount_management("roads")
resultValue = result.getOutput(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(), long(), float()
#
count = int(resultValue)
print count
print types.TypeType(count)
结果属性和方法

属性和方法

说明

inputCount

返回输入数目。

outputCount

返回输出数目。

messageCount

返回消息数目。

maxSeverity

返回最大严重性。返回的严重性可以为 0(未产生错误/警告)、1(产生了警告)或 2(产生了错误)。

resultID

返回唯一结果 ID。如果工具不是地理处理服务,resultID 将返回 ""。

status

返回服务器上作业的状态。

  • 0 - 新建
  • 1 - 提交
  • 2 - 正在等待
  • 3 - 正在执行
  • 4 - 成功
  • 5 - 失败
  • 6 - 超时
  • 7 - 正在取消
  • 8 - 取消
  • 9 - 正在删除
  • 10 - 删除

cancel()

取消服务器上的作业。

getInput(index)

返回给定的输入。如果给定输出是记录集或栅格数据对象,则返回 RecordSet 或 RasterData 对象。

getMapImageURL(ParameterList, Height, Width, Resolution)

获取给定输出的地图服务影像。

getMessage(index)

返回特定消息。

getMessages(severity)

要返回的消息类型:0 = 消息,1 = 警告,2 = 错误。如果未指定值,则返回所有消息类型。

getOutput(index)

返回给定的输出。如果给定输出是记录集或栅格数据对象,则返回 RecordSet 或 RasterData 对象。

getSeverity(index)

返回特定消息的严重性。

结果属性和方法

相关主题

9/15/2013