ArcPy可以让您访问ArcGIS Pro中的所有地理处理工具。在Python中,地理处理工具被称为地理处理工具。这个名称并不完全对应于工具标签,这是工具在ArcGIS Pro中显示的方式。工具名称通常与工具标签相同,但不包含空格。例如,数据管理工具箱中的AddField工具的名称是AddField in ArcPy。
除了使用工具名称外,对工具的引用还需要工具箱别名。这是因为不同工具箱中的多个工具可以共享相同的名称。例如,有多个裁剪工具:一个在Analysis工具箱(即Clip),另一个在Data Management工具箱(即Clip Raster,但在ArcPy中名称是Clip)。工具箱别名与工具箱的名称或标签都不相同——它通常是一个缩写版本。例如,Data Management工具箱的别名是“Management”。
Analysis工具箱中的Clip工具被引用为Clip_analysis()。工具集的名称(在本例中是Extract)没有被引用。另一方面,数据管理工具箱中的裁剪栅格工具被引用为Clip_management()。
在一行Python代码中有两种访问工具的方法。使用工具最简单的方法是调用其相应的函数。所有的地理处理工具都可以在ArcPy中作为函数使用。Python中的函数是一个已定义的功能,用于执行特定的任务;因此,ArcGIS Pro中的每个地理处理工具都是arccpy中的一个功能是有意义的。通过函数调用工具的语法是
arcpy.<toolname_toolboxalias>(<parameters>)
例如,下面的代码运行裁剪工具:
import arcpy arcpy.env.workspace = "C:/Data" arcpy.Clip_analysis("streams.shp", "study.shp", "result.shp")
工具也可以通过使用与工具箱别名匹配的模块来使用。访问工具的另一种方法是,首先将工具箱作为模块调用,然后将工具作为该模块的函数调用,然后调用工具的参数。语法如下
arcpy.<toolboxalias>.<toolname>(<parameters>)
下面是运行裁剪工具的例子:
import arcpy arcpy.env.workspace = "C:/Data" arcpy.analysis.Clip("streams.shp", "study.shp", "result.shp")
两种方法都是正确的
运行地理处理工具的一个关键方面是获得正确的参数语法。每个地理处理工具都有参数,包括必要的和可选的参数,这些参数为工具提供执行所需的信息。常用参数包括输入数据集、输出数据集和控制工具执行的关键字。参数本身有属性,例如:
- Name:每个工具参数的唯一名称
- Type:预期的数据类型,如特征类、整数、字符串或栅格
- Direction:参数是否定义输入值或输出值
- Required:参数值是必须提供还是可选
ArcGIS Pro中每个工具的文档有助于描述其参数和属性。一旦提供了一组有效的参数,工具就可以运行了。大多数参数都指定为字符串。字符串由标识参数值的文本组成,例如数据集的路径或关键字。
这是裁剪工具的帮助文档
Clip工具有四个参数,最后一个(cluster_tolerance)是可选的。“Clip”工具的语法为
Clip(in_features, clip_features, out_feature_class, {cluster_tolerance})
“裁剪”工具的名称后面跟着圆括号内的工具参数。参数之间用逗号分隔。可选参数用大括号{}括起来。参数之间使用一个空格,但这只是为了提高可读性,并不是必需的。
地理处理工具的语法一般遵循相同的模式,如下所示:
必需参数在前面,后面是可选参数。这个顺序反映了ArcGIS Pro中地理处理框架中工具的总体设计。输入数据集通常是第一个或多个参数,然后是输出数据集(如果有的话)。接下来是附加的必需参数,最后是可选参数。这一顺序并不总是严格遵循,特别是对于具有许多参数的工具。输入数据集的参数名称以“in_”作为前缀(如in_data、in_features、in_table、in_workspace),输出数据集的参数名称以“out_”作为前缀(如out_data、out_features、out_table)。
首先列出必需的参数,这样就可以在不需要可选参数时简单地省略它们。但是,有时必须设置一些可选参数。因为参数必须按照工具语法中列出的顺序指定,这意味着可能需要跳过一些可选参数。
例如,思考一下Buffer工具的语法:
Buffer(in_features, out_feature_class, buffer_distance_or_field, {line_side}, {line_end_type}, {dissolve_option}, {dissolve_field})
Buffer工具的代码示例如下:
import arcpy arcpy.env.workspace = "C:/Data/study.gdb" arcpy.Buffer_analysis("roads", "buffer", "100 METERS")
在本例中,如何指定可选的dissolve_option参数,并跳过必需参数后面的其他可选参数?指定该参数有多种方式,如下所示:
- 通过使用空字符串("")、数字符号("#")或值None设置可选参数
- 通过指定必须设置的参数名称,绕过所有其他参数
Buffer工具有三个必需参数和五个可选参数。如果你必须跳过其中两个可选参数。可以通过几种方式实现:
arcpy.Buffer_analysis("roads", "buffer", "100 METERS", "", "", "LIST", "CODE") arcpy.Buffer_analysis("roads", "buffer", "100 METERS", "#", "#", "LIST", "CODE") arcpy.Buffer_analysis("roads", "buffer", "100 METERS", None, None, "LIST", "CODE") arcpy.Buffer_analysis("roads", "buffer", "100 METERS", dissolve_option="LIST", dissolve_field="CODE")
在这四种情况中,可选参数line_side和line_end_type都保留其默认值。
对于None的使用,有必要做一个简短的讨论。None是一个Python关键字,用于定义空值或根本没有值。它与空字符串不同,但在为工具设置参数的上下文中具有相同的效果。None在python中是它自己的数据类型。, NoneType。这个关键字是大写的,因此使用none是不正确的,会产生错误。它也不同于使用具有相同字符的字符串,
使用“none”、“none”或“none”也会产生错误。这些类似的词可能会导致混淆,因为地理处理工具的一些参数值使用NONE作为选项之一。因此,对于不同的场景,参数的值可以设置为="NONE"。
在目前的示例中,工具的参数使用实际的文件名(例如,roads)。也就是说,参数不是设置为变量,而是直接使用值。尽管这种语法是正确的,并且工作得很好,但是使用变量作为参数而不是使用硬编码的值通常会使代码更灵活。首先,您必须创建变量并为它们赋值。然后就可以使用变量作为参数了。当函数被调用时,这些变量被传递给工具。例如,在使用裁剪工具的情况下,它看起来如下所示:
import arcpy arcpy.env.workspace = "C:/Data" infc = "streams.shp" clipfc = "study.shp" outfc = "result.shp" arcpy.Clip_analysis(infc, clipfc, outfc)
注意,变量不需要与工具语法中的参数名称相同。例如,在Clip工具的语法中,输入特性的参数名是in_features,而脚本使用infc作为变量。实际上,您可以使用任何有效的变量名,但给变量起有意义的名称是一种良好的实践。
在这个示例脚本中,数据集的名称仍然硬编码在脚本本身中,而不是在调用裁剪工具的特定代码行中。下一个逻辑步骤是使用用户或其他脚本或工具提供的变量值,这意味着文件名不再出现在脚本中。例如,下面的代码运行Copy工具,并使用arcpy.GetParameterAsText()函数从用户输入中获取输入和输出特征类:
import arcpy infc = arcpy.GetParameterAsText(0) outfc = arcpy.GetParameterAsText(1) arcpy.Copy_management(infc, outfc)
根据用户输入的参数设置工具参数是脚本工具常用的一种方式。以这种方式处理变量为您提供了更多的灵活性,并使您的大部分代码可重复使用。