前面介绍了一个 实例,对脚本工具的参数进行了介绍,下面就需要对我们新建的脚本工具进行参数设置,这里可以链接到第二节。
原文链接
打开前面创建的自定义脚本工具:random sample
对于参数的设置一方面可是自己手动输入,比如标签和name等,其他的(例如数据类型等)可以通过下拉列表对参数进行设置。
这个脚本工具的第一个自定义参数是输入要素类。第一个参数的标签是Input Features。标签显示参数的信息,应该能明确表达意义,并且标签允许有空格等。Name属性是根据标签设置的默认名称,一般不做修改。要移动到下一个参数,单击单元格或者使用Tab键都可以。通常情况下,对第一个参数的所有的必要的属性都进行了设置后,工具会自动再创建一个新的空的参数。
接下来对数据类型进行设置,打开参数类型的对话框,默认的数据类型为字符串,选择参数类型为Feature Layer。
上图中还有两个选项:Multiple values和Table of value,分别是选择多种数据类型和将表中的值作为一个列表传递给脚本,以表格的形式同时输入多个值。这两个选项提供了更复杂情况下的选择。
作者在这里同样对其他地理工具进行了一个示例介绍。例如:union和intersect工具就允许使用 table of values的格式。例如:union工具的第一个输入参数是要素类,但是它允许输入多个要素图层和及其关联的等级。
具有多个值的参数作为字符串传递给脚本,每个列表元素用分号分开。可以使用 split()
方法从字符串中创建元素列表。
import arcpy
input = arcpy.GetParameterAsText(0)
input_list = input.split(";")
作为替代方案,也可以是使用arcpy.GetParameter()
处理具有多个值的参数,在这种情况下,结果是一个值的列表,并且是使用索引或迭代的方式获取各个值。
对于包含一个 table of values的参数,可以使用GetParameter
去获取一个 ValueTable
代替使用字符串或列表。在ValueTable
对象中,值存储在行或列组成的虚拟表中。ValueTable
是专门为此类参数设计的ArcPy类。
由于各种不同的选项,因此在编写脚本时了解从工具对话框传递给脚本的参数的数据类型很重要。回到random sample脚本工具中,
对于其他的参数属性,选择默认值就可以了。这些默认值包括Required for Type 和 Input for Direction。
关于Type属性,有三种选择:Required、Optional、Derived。required意味着必须指定参数值才能运行程序,optional意味着运行脚本可以不设置参数值。通常使用optional时会设置一个默认的值。Derived(派生)仅仅意味着用于输出参数,不会出现在工具对话框中,派生参数用于多种情况下:当工具输出为单个值而不是数据集时,当工具使用来自其他参数的信息创建输出时,当工具修改输入而不创建新输出时。
任何工具都会有输出,以便于可以在模型中使用该工具并且从脚本中调用该工具。有时候确保工具具有唯一输出的方法时使用派生参数,具有派生参数的工具,例如:Get Count
和 Add field
工具。以Get Count
工具为例,输入参数时要素类、表、栅格,输出是 :行数 a count of the number of rows。这个count是一个标量变量,并且作为Result
对象返回。count 包含一个输出参数,并且是一个没有出现在工具对话框中的派生参数。虽然通过参数看,get count工具有两个参数,但是因为有一个派生的输出参数,因此不会出现在对话框中。如图:
关于 Direction属性,定义了是输入还是输出,只有这两种选项。对于Derived 的Type,Direction会自动设置成输出。每个工具至少有一个输出。
接下来回到random sample脚本工具,对于第二个参数的设置如下:
Label: Output Features
Name: Output_Features
Data Type: Feature Layer
Type: Required
Direction: Output
第三个参数由随机选择的特征数组成,如下:
Label: Number of Features
Name: Number_of_Features
Data Type: Long (for long integer)
Type: Required
Direction: Input
第三个参数这里,使用Long数据类型可以确保仅仅输入整数型。如果输入的是文本或者十进制的数值,这个工具就不会运行。这个参数还要考虑Filter属性。从逻辑上讲,特征的数量应该是正数,不包括 0 和负数。Filter设置允许值的范围,这个属性的选项是 : None, Range , Value。在range能够打开 范围过滤器对话框,进行如下的设置,设置最大最小值。最小值为1,随便设置一个比较大的最大值就行。
如果要改变参数的顺序,可以在参数上右键进行移动或者删除。
作者对Filter参数其他部分进行了介绍:Filter 允许限制输入值。有几种过滤器类型,过滤器类型取决于参数的Data Type,对于Long或者Double类型,过滤器类型为Range 和 Value List。Value List允许指定特定的值的列表。当数据类型为要素类时,只有一个筛选器,是Feature Type,它允许根据几何类型更改参数的有效条目,包括:点、 折线、多边形。
可用的筛选器:
Areal units—acres, hectares, and so on
Feature type—point, polyline, polygon, and so on
Field—short, long, Coat, double, text, and so on
File—custom file extensions (e.g., .csv, .txt, and so on)
Linear units—inches, feet, meters, and so on
Range—values between a specified minimum and maximum value
Time units—seconds, minutes, hours, and so on
Value list—a set of specific custom values
Workspace—file system, local database, or remote database
大多数的数据类型只有一种过滤器类型,设置过滤器可以提高工具的可靠性。
在上面的介绍中,还有几个属性没有介绍,包括Category类别、Dependency依赖关系、Default默认值、Environment 环境、符号系统 symbology,这些属性在 random sample中没有被使用。书的作者对这几个属性也进行了简单介绍。
Category允许在工具对话框中组织工具参数,可以输入名称来创建自己的类别。在使用一次类别后,名称显示为其他参数的下拉选项。同一个类别的参数在脚本工具对话框中组织在一个可扩展的组中。这个分组用于具有许多参数的工具,效果如下所示:在工具分组中还有其他的工具
打开某一个类别:
Dependency 属性能用于输入和派生的输出参数。在许多情况下,一个工具参数与另一个工具参数密切相关。以下图的删除字段工具为例,只有先输入表之后,才能删掉表里的某个字段。
使用dependency 属性控制统一工具中的一个参数对另一个参数的依赖。在删除字段工具中,Drop field 参数的Dependency 属性设置为输入表。使用Dependency 属性的第二个原因是使用派生的输出参数。例如:当输入参数被工具修改时,输出派生参数的Depenency属性设置为输入参数。对于删除字段工具,输出参数的Dependency 属性设置为输入表。
derived 导出的输出参数在工具对话框中不可见。
default 属性允许您在脚本工具对话框打开时指定参数的值。如果未指定默认值,则工具对话框中的参数值将为空白。默认值通常用于布尔参数。
Environments 属性提供了另一种设置默认值的选项。这个属性提供了一个包含环境设置的下拉列表。您选择一个特定的设置,当设置此属性时,参数的默认值是从地理处理框架的环境中获取的。
符号系统属性允许您指定图层文件的路径。默认情况下,地理处理工具的输出会添加到当前地图。通过选中“将输出数据集添加到打开的地图”框,可以将行为设置为地理处理选项的一部分。 以这种方式添加的图层的符号系统遵循在 ArcGIS Pro 中向地图添加数据的常规规则 - 换句话说,没有自定义符号系统。 符号系统属性可以设置为自定义图层 文件(.lyrx)。 这个选项仅可用于图层 文件有意义的输出,例如要素图层、栅格、TIN 等。设置符号系统属性不会控制是否将输出添加到打开的地图,因为此选项由地理处理选项控制。