设置脚本工具参数
几乎所有工具都具有参数,可在工具对话框或脚本中设置参数值。执行工具时,会将参数值发送到该工具的源代码。工具将读取这些值,然后继续执行操作。
要了解有关参数的详细信息,请参阅了解脚本工具参数。
脚本工具参数可以在使用添加脚本 向导时进行设置。还可通过工具的属性 对话框添加、删除和修改脚本工具参数。要访问脚本工具属性,请右键单击工具,单击属性,然后单击参数选项卡。
无论是在添加脚本 向导中还是在属性 对话框中,设置参数的过程(如下所述)均相同。
要添加新参数,请单击显示名称列的第一个空单元格并输入该参数的名称。此名称将显示在工具对话框中,名称中可以包含空格。对于 Python 语法,参数名称将用下划线 (_) 代替该显示名称中的空格。
输入参数的显示名称后,通过单击数据类型单元格为参数选择一种数据类型,如下所示。
还可以为每个参数设置其他属性,如下所示。
属性 |
描述 |
---|---|
可以是“必需”、“可选”或“派生”。“派生”表示工具的用户未输入参数值。输出参数通常是“派生”类型。 | |
可以是“输入”或“输出”。如果参数的“类型”是“派生”,则方向始终是“输出”。 | |
如果希望得到一组值,可将“多值”设置为“是”;如果希望得到单个值,则设置为“否”。 | |
参数的默认值。如果参数的数据类型是要素集或记录集,则默认将被替换为方案。 | |
如果参数的默认值来自于环境设置,则此属性将包含环境设置的名称。 | |
如果希望仅为参数输入特定的数据集或值,可以指定过滤器。过滤器类型有六种,您可以根据参数的数据类型来选择过滤器的类型。 | |
此属性适用于派生的输出参数以及输入参数的数据类型。对于派生的输出参数,获取自可以设置为包含输出定义的参数。对于输入参数,获取自可以设置为包含输入所需信息的参数。 | |
此属性仅适用于输出参数。值为图层文件 (.lyr) 的位置,该文件中包含用于显示输出的符号系统。 |
类型
提供三种“类型”选项:
- 必需参数要求用户提供输入值。如果用户未提供值,则无法执行该工具。
- 可选参数不需要用户提供值。
- 派生参数只适用于输出参数(请参阅下文中的方向)。派生的输出参数不显示在工具对话框中。
派生的输出参数可用于下列五种工具:
- 输出与输入相同的工具,例如计算字段。计算字段可更改输入表中特定字段的值,但不会创建新表或修改输入的方案。输出与输入相同的其他工具位于“编辑”工具箱中。
- 可修改输入方案的工具,例如添加字段。添加字段可以向输入表中添加字段,但不会创建新的输出表。
- 可使用其他参数中的信息创建输出的工具,例如创建要素类工具。凭借创建要素类工具,仅需指定工作空间及新要素类的名称即可创建要素类。
- 可输出相对于数据集的标量值的工具。例如,获取计数,该工具可输出一个长整型值(记录数)。当工具输出标量值时,输出为“派生”类型。
- 将在已知位置创建数据的工具。例如,在您的脚本中,可能将更新已知工作空间中的现有表。用户无需在对话框或脚本中提供此表。
如果脚本工具包含派生的输出,则需要使用 SetParameterAsText() 函数在脚本中设置派生输出参数的值。
所有工具都应具有输出
所有脚本工具都应具有输出参数,以便能够在模型构建器中使用。模型构建器的基本理念是将工具的输出连接到其他工具的输入。如果脚本工具没有输出参数,则不适用于模型构建器。您至少可以输出一个布尔参数,如果工具成功完成,返回 true,否则返回 false。
修改了输入参数的派生输出
下图显示了在模型构建器中应用一个假设的脚本工具更新字段值。(就本论述而言,组织将使用更新字段值来检查一组已知文本字段的内容以及纠正拼写错误和大小写错误。)更新字段值不会生成新的要素类,只对输入要素类中的字段值进行更新。
更新字段值的正确参数定义如下图所示,图中的更新字段值具有输出要素类参数,其类型设置为“派生”。由于此工具的输出与输入相同,所以将获取自属性设置为输入参数。(获取自属性将使用参数的名称,即用下划线代替显示名称中的空格。)
未修改输入参数的派生输出
下图显示了一个不同的工具,其中输出为派生类型,但并非获取自任何输入参数(获取自属性留空)。在这种情况下,假设的将数据提交到资料档案库工具会将输入要素类复制到已知工作空间(资料档案库),然后添加并填充日期/时间字段。
设置输出值
在上述模型中,请注意复制要素工具是空的(白色,而不是黄色)。这是因为输出要素变量(虽然是绿色的)不包含值,只有在执行了该工具之后才了解输出要素的名称和位置。这种情况下,脚本必须通过使用 ArcPy 函数 SetParameterAsText() 指定输出值。SetParameterAsText() 函数将使用文本字符串或对象来设置输出参数的值,例如值表。
通过提供工具验证代码,可以在执行工具之前为输出提供值。
以下是使用 SetParameterAsText() 的示例代码,基于上述将数据提交到资料档案库脚本所执行的操作。
# Post data to Repository - copies the input features to the
# current repository, adding and populating a date
# field
#
# Import system modules and arcpy
#
import sys
import string
import os
import arcpy
# Get the value of the input parameter
#
inFC = arcpy.GetParameterAsText(0)
# Create the pathname to the output feature class.
# 1) get the name of the feature class
# 2) remove any file extension, such as ".shp"
# (we're copying to a geodatabase which doesn't
# allow file extensions, like .shp)
#
fcName = os.path.basename(inFC)
fcName = os.path.splitext(fcName)[0]
repository = "e:/repository/featuredata.gdb"
outFC = os.path.join(repository, fcName)
# Copy the input to the output, add the date field
#
arcpy.CopyFeatures_management(inFC, outFC)
arcpy.AddField_management(outFC, "PostDate", "DATE")
# Create a locale-specific string containing the current date
# and time, then calculate it into the PostDate field, adding
# the required quotes around the postTime string.
#
import time
postTime = time.strftime("%x %X")
arcpy.AddMessage(postTime)
qPostTime = "\"" + postTime + "\""
arcpy.CalculateField_management(outFC, "PostDate", qPostTime)
# Set output parameter
#
arcpy.SetParameterAsText(1, outFC)
输出值而非数据
上述示例展示了输出派生数据集。但是,某些工具将输出值而非数据集,例如获取计数工具,它将输出包含表中行数的长整型数据。输出值而非数据集是很常见的。在您自己的脚本中,可能对多个相关数据集执行分析,并且只输出一些数字或通过/失败的布尔值。
包含值数据类型(例如“长整型”或“布尔型”)的输出参数始终为“派生”类型而非“必需”类型。
方向
该属性定义参数是工具的输入参数还是工具的输出参数。
如果参数类型为“派生”,则参数方向将自动设置为输出。
多值
如果希望参数能够处理一组值而非单个值,可将多值属性设置为“是”。
在工具对话框中,多值可使用两个不同的用户界面控件,如下图所示。
下图将显示这两种类型的多值控件。
多值将以分号分隔的字符串形式传递到脚本。在上图中,如果用户选中所有道路类型,则参数值将是 Interstates;Primary roads;Secondary roads。要将分号分隔的字符串分解开,可使用 Python split() 方法,如下面的代码示例所示。
roadTypes = arcpy.GetParameterAsText(0)
roadTypeList = roadTypes.split(";")
# Process each road type
#
for rType in roadTypeList:
# rType contains an individual road type string (ex: "Interstates")
#
arcpy.AddMessage("Processing: " + rType)
默认值
打开脚本的工具对话框时,默认值将是参数的内容。如果在脚本中为参数输入 #,则也是将要使用的值。如果没有为默认值属性指定任何值,则在脚本对话框打开时参数值将为空。如果为该属性指定了值,则环境属性将不可用。要启用环境属性,请清除默认属性。
方案
当输入参数的数据类型为“要素集”或“记录集”时,必须指定方案的位置,该方案用于定义要输入的要素的字段和几何类型。方案可以是要素类、表或图层文件 (.lyr)。
关于要素集和记录集
要素集和记录集的数据类型允许交互输入数据。要素集允许脚本的用户通过单击地图在 ArcMap 中交互创建要素。记录集允许用户在简单的表格中交互创建行。
有关要素集和记录集的详细信息,请查看以下链接。
主题 |
描述 |
---|---|
本主题介绍了如何在 Python 中使用 FeatureSet 和 RecordSet 对象。 | |
本主题介绍了如何使用要素集和记录集控件。 |
环境
可以将参数的默认值设置为环境设置的值,方法是右键单击环境旁的单元格,然后选择环境设置的名称。选择环境设置后,默认属性将被忽略。要使用默认属性而不是环境属性,可通过选择下拉列表中的空条目清除环境属性。
过滤器
如果希望仅为参数输入特定的值或数据集类型,可以指定过滤器。单击过滤器旁的单元格,并从下拉列表中选择合适的过滤器。这将打开一个对话框,可通过此对话框为过滤器指定值。过滤器类型有六种,您可以根据参数的数据类型来选择过滤器的类型。
过滤器类型 |
值 |
---|---|
值列表 |
字符串或数值的列表。采用字符串型、长整型、双精度型和布尔型参数数据类型。 |
范围 |
最小值和最大值。采用长整型和双精度型数据类型。 |
要素类 |
允许的要素类类型列表:点、多点、折线、面、多面体、球体、注记和维度。可为过滤器提供多个值。 |
文件 |
文件后缀列表,例如 txt; e00; ditamap。 |
字段 |
允许的字段类型列表:短整型、长整型、单精度、双精度、文本、日期、OID、几何、Blob、栅格、GUID、全局 ID 和 XML。可为过滤器提供多个值。 |
工作空间 |
允许的工作空间类型列表:文件系统、本地数据库或远程数据库。可提供多个类型值。 |
通常,只可以选择一种过滤器类型。仅“长整型”和“双精度型”有两个选项:“值列表”和“范围”。
还可以通过自定义脚本工具的 ToolValidator 类,使用 Python 以编程方式设置过滤器。
值列表
“值列表”过滤器对提供一组关键字非常有利。许多工具都具有一组预定义的关键字,例如添加字段中的字段类型参数,或者叠加分析工具集中众多工具的 JoinAttributes 参数。
“值列表”过滤器可用于“长整型”和“双精度”数据类型。对于这些类型,您可以输入允许的数值。
如果希望用户能够选择多个值,请将多值属性设置为“是”。
“值列表”还可用于“布尔”数据类型。对于“布尔”数据类型,“值列表”中包含有两个值:值 true 和值 false。值 true 始终是列表中的最初值。这些值用在命令行中指定值。相关示例,可参阅“添加字段”和用于 IsNullable 属性的 {NULLABLE | NON_NULLABLE} 关键字。
范围
“长整型”或“双精度”参数可具有范围过滤器。范围过滤器具有两个值:最小值和最大值。列表中的第一个值是最小值。包括范围边界值,这表示最小值和最大值也是有效数据。
要素类
对于此过滤器,可以选择一个或多个过滤器值。将根据过滤器值检查输入要素类。例如,如果只将“点”选择为过滤器值,则用户只能将点要素类作为参数值进行输入。
文件
文件过滤器包含文件可具有的文件后缀的列表,如 txt(简单文本文件)和 csv(逗号分隔值)。您可以提供任何后缀的文本,不必是 ArcGIS 可识别的后缀。后缀可为任意长度,且不包含句点。
字段
字段过滤器用于定义允许的字段类型:短整型、长整型、单精度、双精度、文本、日期、OID、几何、Blob、栅格、GUID、全局 ID 和 XML。可为过滤器提供多个值。
工作空间
工作空间过滤器用于指定允许的输入工作空间的类型。共有三个值:
- 文件系统
系统文件夹,用于存储 shapefile、coverage、INFO 表和格网
- 本地数据库
个人地理数据库或文件地理数据库
- 远程数据库
ArcSDE 数据库连接
获取自
“获取自”属性有两种用途:
- 对于派生的输出参数,获取自设置为将通过工具修改的输入参数。有关派生数据和获取自属性的详细信息,请参阅上文中类型属性的介绍。
- 对于输入参数,获取自包含数据类型所使用的其他参数的名称。例如,对于输入字段数据类型,获取自设置为包含字段的表参数的名称,如下图所示。
只能为特定输入参数设置“获取自”属性,如下表中所示。
输入数据类型 |
获取自数据类型 |
描述 |
---|---|---|
字段或 SQL 表达式 |
表 |
含有字段的表 |
INFO 项目或 INFO 表达式 |
INFO 表 |
包含项目的 INFO 表 |
Coverage 要素类 |
Coverage |
包含要素的 coverage |
面积单位或线性单位 |
地理数据集 |
用于确定默认单位的地理数据集 |
坐标系 |
工作空间 |
用于确定默认坐标系的工作空间 |
网络分析等级设置 |
网络数据集 |
包含等级信息的网络数据集 |
地理统计值表 |
地统计图层 |
包含表的分析图层 |
符号系统/符号化
如果工具输出的是要素集、栅格、TIN 或 ArcGIS Network Analyst 扩展模块 图层,则可以在符号系统属性中指定图层文件 (.lyr) 的位置。通过 ArcMap、ArcGlobe 或 ArcScene 运行工具时,如果启用了将地理处理操作的结果添加到显示中,则输出会添加到显示中,并使用符号系统图层文件中定义的符号系统进行绘制。
每次运行工具时都会读取图层文件。如果无法找到图层文件(已被移动或删除),则将使用默认的符号系统。