几乎所有工具都具有参数,可在工具对话框或脚本中设置参数值。执行工具时,会将参数值发送到该工具的源代码。工具将读取这些值,然后继续执行操作。
要了解有关参数的详细信息,请参阅了解脚本工具参数。
脚本工具参数可以在创建新脚本工具时进行设置。还可通过工具的属性对话框添加、删除和修改脚本工具参数。要访问脚本工具属性,请右键单击工具,单击属性,然后单击参数选项卡。
要添加新参数,请单击标注列的第一个空单元格并输入该参数的名称。此名称将显示在工具对话框中,名称中可以包含空格。在名称列下,将根据标注创建默认参数名称,并可在需要时更改名称。此参数名称用于 Python 语法并将受到验证(包括空格移除)。
输入参数的显示名称后,通过单击数据类型单元格为参数选择一种数据类型,如下所示。
如果需要创建可接受多个值的参数,请选中多值复选框。如果需要创建复合数据类型(即可接受不同数据类型的参数),您可以选中多种数据类型。
还可以为每个参数设置其他属性,如之前所述及以下所示。
属性 | 说明 |
---|---|
可以是必需、可选或派生。“派生”表示工具的用户未输入参数值。输出参数通常是“派生”类型。 | |
可以为输入或输出。如果参数类型为派生,则方向始终为输出。 | |
可将参数分组为不同类别。 | |
如果希望仅为参数输入特定的数据集或值,可以指定过滤器。过滤器类型有六种,您可以根据参数的数据类型来选择过滤器的类型。 | |
此属性适用于派生的输出参数以及输入参数的数据类型。对于派生的输出参数,依赖关系可以设置为包含输出定义的参数。对于输入参数,依赖关系可以设置为包含输入所需信息的参数。 | |
参数的默认值。如果参数的数据类型是要素集或记录集,则默认将用于定义参数的方案。 | |
如果参数的默认值来自于环境设置,则此属性将包含环境设置的名称。 | |
此属性仅适用于输出参数。值为图层文件 (.lyrx) 的位置,该文件中包含用于显示输出的符号系统。 |
类型
提供三种类型选项:
- 必需参数要求用户提供输入值。如果用户未提供值,则无法执行该工具。
- 可选参数不需要用户提供值。
- 派生参数只适用于输出参数(请参阅下文中的方向)。派生的输出参数不会显示在工具对话框中。
派生的输出参数可用于下列五种工具:
- 输出与输入相同的工具,例如计算字段。计算字段可更改输入表中特定字段的值,但不会创建新表或修改输入的方案。可在编辑工具箱中找到的输出与输入相同的其他工具示例。
- 用于修改输入方案的工具,例如添加字段。添加字段可以向输入表中添加字段,但不会创建新的输出表。
- 可使用其他参数中的信息创建输出的工具,例如创建要素类工具。使用创建要素类工具时,仅需指定工作空间及新要素类的名称即可创建要素类。
- 可输出相对于数据集的标量值的工具。例如,获取计数,该工具可输出一个长整型值(记录数)。当工具输出标量值时,输出为派生类型。
- 将在已知位置创建数据的工具。例如,在您的脚本中,可能将更新已知工作空间中的现有表。用户无需在对话框或脚本中提供此表。
注:
如果脚本工具包含派生的输出,则需要使用 SetParameterAsText 或 SetParameter 函数在脚本中设置派生输出参数的值。
输出值而非数据
上述示例展示了输出派生数据集。但是,某些工具将输出值而非数据集,例如获取计数工具,它将输出包含表中行数的长整型数据。输出值而非数据集是很常见的。在您自己的脚本中,可能对多个相关数据集执行分析,并且只输出一些数字或通过/失败的布尔值。
包含值数据类型(例如长整型或布尔型)的输出参数始终为派生类型而非必需类型。
方向
该属性定义参数是工具的输入参数还是工具的输出参数。
如果参数类型为派生,则参数方向将自动设置为输出。
所有脚本工具都应具有输出参数,以便能够在 ModelBuilder 中使用。ModelBuilder 的基本理念是将工具的输出连接到其他工具的输入。如果脚本工具没有输出参数,则不适用于 ModelBuilder。输出可能是在参数值中输入的数据集、在脚本内部确定位置和/或名称的派生输出、也可能是经过计算或确定的派生值。您至少可以输出一个布尔参数,如果工具成功完成,返回 true,否则返回 false。
类别
可以将参数分为不同的类别,从而最小化工具对话框的大小或将不常使用的相关参数分为一组。如果为其他参数设置了类别,则可以输入新类别名称或从列表中进行选择。多个 ArcGIS Network Analyst extension 工具使用了各种类别,如下所示。
类别始终显示在非类别化参数之后。不要将必选参数归类,因为这些参数在工具对话框中处于隐藏状态。
多值
如果希望参数能够处理一组值而非单个值,可将多值属性设置为是。
多值控件的示例如下所示:
当使用 arcpy.GetParameter() 函数时可通过列表访问多值,并可通过使用 for 循环迭代多值。此外,也可使用 arcpy.GetParameterAsText() 通过以分号分隔的字符串访问多值。要将以分号分隔的字符串分解开,可使用 Python split() 方法,如下面的代码示例所示。
import arcpy
road_types = arcpy.GetParameterAsText(0)
road_list = road_types.split(";")
# Process each road type
for road_type in road_list:
# road_type contains an individual road type string (ex: "Interstates")
arcpy.AddMessage("Processing: {}".format(road_type))
默认
打开脚本的工具对话框时,默认值将是参数的内容。如果在脚本中为参数输入 #,则也是将要使用的值。如果没有为默认值属性指定任何值,则在脚本对话框打开时参数值将为空。如果为该属性指定了值,则环境属性将不可用。要启用环境属性,请清除默认属性。
方案
当输入参数的数据类型为要素集或记录集时,必须指定方案的位置,该方案用于定义要输入的要素的字段和几何类型。方案可以是要素类、表或图层文件 (.lyrx)。
要素集和记录集数据类型允许交互输入数据。要素集允许脚本的用户通过单击地图以交互方式创建要素。记录集允许用户在表格中以交互方式创建行。
环境
可以将参数的默认值设置为环境设置的值,方法是右键单击环境下的对应单元格,然后选择环境设置的名称。
过滤
如果希望仅为参数输入特定的值或数据集类型,可以指定过滤器。单击过滤器下的对应单元格,并从下拉列表中选择合适的过滤器类型。这将打开一个对话框,可通过此对话框为过滤器指定值。过滤器类型有六种,您可以根据参数的数据类型来选择过滤器的类型。
通常,只可以选择一种过滤器类型。仅长整型和双精度有两种选择:值列表和范围。
还可以通过自定义脚本工具的 ToolValidator 类,使用 Python 以编程方式设置过滤器。
面积单位
面积单位过滤器用于定义允许的单位类型:平方英寸、平方英尺、平方码、英亩、平方英里、平方毫米、平方厘米、平方分米、平方米、公亩、公顷、平方千米和未知。
要素类型
对于此过滤器,可以选择一个或多个过滤器值。将根据过滤器值检查输入要素类。例如,如果只将点选择为过滤器值,则用户只能将点要素类作为参数值进行输入。
要素类型过滤器用于定义允许的要素类类型:点、多点、面、折线、注记和尺寸注记。可为过滤器提供多个值。
字段
字段过滤器用于定义允许的字段类型:短整型、长整型、浮点型、双精度、文本、日期、OID、几何、Blob、栅格、GUID、GlobalID 和 XML。可为过滤器提供多个值。
文件
文件过滤器包含文件可具有的文件后缀的列表,如 txt(简单文本文件)和 csv(逗号分隔值)。您可以提供任何后缀的文本,不必是 ArcGIS 可识别的后缀。后缀可为任意长度,且不包含句点。用分号分隔符分隔多个后缀。
线性单位
线性单位过滤器用于定义允许的单位类型:英寸、磅、英尺、码、英里、海里、毫米、厘米、米、千米、十进制度、分米、度和未知。可为过滤器提供多个值。
范围
长整型或双精度参数可具有范围过滤器。范围过滤器有两个值:最小值和最大值。包括范围边界值,这表示最小值和最大值也是有效数据。
时间单位
时间单位过滤器用于定义允许的单位类型:毫秒、秒、分钟、小时、日、周、月、年、十年、百年和未知。可为过滤器提供多个值。
出行模式单位类型
此过滤器可用于基于出行模式的阻抗属性单位来设置允许的出行模式类型。有效选项为时间、距离和其他。默认设置为允许所有三个类型。
值列表
值列表过滤器对提供一组关键字非常有利。许多工具都具有一组预定义的关键字,例如添加字段中的字段类型参数,或者叠加分析工具集中众多工具的 JoinAttributes 参数。
值列表过滤器可用于长整型和双精度数据类型。对于这些类型,您可以输入允许的数值。
如果希望用户能够选择多个值,请将多值属性设置为是。
值列表还可用于布尔数据类型。对于布尔数据类型,值列表将包含两个值:true 和 false。值 true 始终是列表中的最初值。这些值用在命令行中指定值。相关示例,可参阅“添加字段”和用于 IsNullable 属性的 {NULLABLE | NON_NULLABLE} 关键字。
工作空间
工作空间过滤器用于指定允许的输入工作空间的类型。三个值如下所示:
- 文件系统 - 系统文件夹,用于存储 shapefile、coverage、INFO 表和格网
- 本地数据库 - 个人地理数据库或文件地理数据库
- 远程数据库 - 企业级数据库连接
可提供多个类型值。
依赖关系
依赖关系属性有两种用途:
- 对于派生的输出参数,可将依赖关系设置为将通过工具修改的输入参数。有关派生数据和依赖关系的详细信息,请参阅上文中类型属性的介绍。
- 对于输入参数,依赖关系包含数据类型所使用的其他参数的名称。例如,对于输入字段数据类型,可将依赖关系设置为包含字段的表参数的名称。
只能为特定输入参数设置依赖关系属性,如下表中所示。
输入数据类型 | 获取自数据类型 | 说明 |
---|---|---|
字段或 SQL 表达式 | 表 | 含有字段的表 |
INFO 项目或 INFO 表达式 | INFO 表 | 包含项目的 INFO 表 |
Coverage 要素类 | Coverage | 包含要素的 coverage |
面积单位或线性单位 | 地理数据集 | 用于确定默认单位的地理数据集 |
坐标系 | 工作空间 | 用于确定默认坐标系的工作空间 |
Network Analyst 等级设置 | 网络数据集 | 包含等级信息的网络数据集 |
地统计值表 | 地统计图层 | 包含表的分析图层 |
网络出行模式 | 网络数据源、网络数据集、网络数据集图层 | 出行模式列表 |
符号系统
如果工具输出的是要素集、栅格、TIN 或图层,则可以在符号系统属性中指定图层文件 (.lyrx) 的位置。运行工具并将输出添加到显示中时,将使用符号系统图层文件中定义的符号系统进行绘制。
警告:
每次运行工具时都会读取图层文件。如果无法找到图层文件(已被移动或删除),则将使用默认的符号系统。