定义 Python 工具箱中的参数
几乎所有工具都具有参数,可在工具对话框或脚本中设置参数值。执行工具时,会将参数值发送到该工具的源代码。工具将读取这些值,然后继续执行操作。
要了解有关参数的详细信息,请参阅了解脚本工具参数。
在 Python 工具箱 (.pyt) 中,通过创建参数对象并设置其属性在工具类的 getParameterInfo 方法中定义工具参数。
参数对象具有多个读写属性,但必须为每个参数设置的属性包括:
属性 | 说明 |
---|---|
displayName | 工具对话框中显示的参数名称。 |
名称 | Python 中的工具语法中显示的参数名称。 |
datatype | 每个 Python 工具箱的工具参数都有关联的数据类型。打开脚本工具对话框后,地理处理使用数据类型检查参数值。 数据类型也可用于浏览数据 - 只有与参数数据类型匹配的数据才会显示在浏览对话框中。 要获取参数数据类型的列表,请参阅在 Python 工具箱中定义参数数据类型。 可用的数据类型有许多种,最常用的数据类型包括字符串型、双精度型、布尔型、要素图层和栅格数据集。 |
parameterType | 提供三种 parameterType 选项:
|
方向 | 该属性定义参数是工具的输入参数还是工具的输出参数。 如果将 parameterType 设置为“派生”,则应将参数 direction 设置为“输出”。 |
以下示例为工具定义了三个参数:一个用于接受要素图层的输入参数、一个用于接受新字段名称的输入参数以及一个基于第一个输入参数的派生输出参数。对于要反映在工具中的参数,将在 getParameterInfo 方法的结尾处返回这些参数。
def getParameterInfo(self):
#Define parameter definitions
# First parameter
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
# Second parameter
param1 = arcpy.Parameter(
displayName="Sinuosity Field",
name="sinuosity_field",
datatype="Field",
parameterType="Optional",
direction="Input")
param1.value = "sinuosity"
# Third parameter
param2 = arcpy.Parameter(
displayName="Output Features",
name="out_features",
datatype="GPFeatureLayer",
parameterType="Derived",
direction="Output")
param2.parameterDependencies = [param0.name]
param2.schema.clone = True
params = [param0, param1, param2]
return params
使用派生的输出
以上示例中显示的最后一个参数是派生输出参数。派生的输出参数可用于下列五种工具:
- 输出与输入相同的工具,例如计算字段或以上所示示例。计算字段可更改输入表中特定字段的值,但不会创建新表或修改输入的方案。输出与输入相同的其他工具位于“编辑”工具箱中。
- 可修改输入方案的工具,例如添加字段。添加字段可以向输入表中添加字段,但不会创建新的输出表。
- 可使用其他参数中的信息创建输出的工具,例如创建要素类工具。凭借创建要素类工具,仅需指定工作空间及新要素类的名称即可创建要素类。
- 可输出相对于数据集的标量值的工具。例如,获取计数,该工具可输出一个长整型值(记录数)。当工具输出标量值时,输出为“派生”类型。
- 将在已知位置创建数据的工具。例如,在您的脚本中,可能将更新已知工作空间中的现有表。用户无需在对话框或脚本中提供此表。
创建多值参数
如果希望参数能够处理一组值而非单个值,可将多值属性设置为 True。
在工具对话框中,多值可使用两个不同的用户界面控件,如下图所示。
下图将显示这两种类型的多值控件。
在上图中,如果用户选中所有道路类型,则参数值将被设置为 ["Interstates", "Primary roads", "Secondary roads"]。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input",
multiValue=True)
创建值表参数
某些称作“值表”的参数,可用于指定多个条目。例如,可使添加、联合及许多其他工具中的输入要素参数包括多个数据集,也可使融合及汇总统计数据工具中的统计字段包括多个字段。
通过将 datatype 设置为 GPValueTable 来定义值表参数,并且设置一个 columns 属性以定义参数的数据类型和列标题。在以下示例中,通过接受要素图层和整数值 (GPLong) 的两列来定义值表参数。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName='Input Features',
name='in_features',
datatype='GPValueTable',
parameterType='Required',
direction='Input')
param0.columns = [['GPFeatureLayer', 'Features'], ['GPLong', 'Ranks']]
要为值表参数设置默认值,可使用 values 属性,然后在值列表中提供参数值。
为参数设置默认值
可通过两种方法为参数设置默认值:直接通过 value 属性应用一个值或通过 defaultEnvironmentName 应用环境设置的值。
打开脚本的工具对话框时,默认值将是参数的内容。如果在脚本中为参数输入 #,则也是将要使用的值。如果没有指定 value,则在打开脚本对话框时,参数值将为空。
设置来自环境的默认值
通过将 defaultEnvironmentName 属性设置为环境设置的名称,可将参数的默认值设置为环境设置的值。选择环境设置后,value 属性将被忽略。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Workspace",
name="in_workspace",
datatype="DEWorkspace",
parameterType="Required",
direction="Input")
# In the tool's dialog box, the first parameter will show
# the workspace environment's value (if set)
param0.defaultEnvironmentName = "workspace"
定义参数方案
类型为要素类、表、栅格或工作空间的每个输出参数都具有 schema 对象。只有输出要素类、表、栅格和工作空间具有 schema,其他类型则没有。schema 对象通过地理处理进行创建。可以通过参数对象访问此方案,或者设置规则以便描述工具的输出。在设置方案规则之后,地理处理内部验证代码会检查设置的规则并更新输出的描述。
要了解有关使用方案的详细信息,请参阅方案主题。
当输入参数 datatype 为“要素集”或“记录集”时,用户必须指定要输入的要素的 fieldsRule 和 geometryType。
关于要素集和记录集
要素集和记录集的数据类型允许交互输入数据。要素集允许脚本的用户通过单击地图在 ArcMap 中交互创建要素。记录集允许用户在简单的表格中交互创建行。
通过将参数的 value 属性设置为要素类、表或图层文件 (.lyr),可为要素集和记录集控件设置符号系统和方案(属性和几何类型)
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Feature Set",
name="in_feature_set",
datatype="GPFeatureRecordSetLayer",
parameterType="Required",
direction="Input")
# Use __file__ attribute to find the .lyr file (assuming the
# .pyt and .lyr files exist in the same folder)
param0.value = os.path.join(os.path.dirname(__file__),
"Fire_Station.lyr")
有关要素集和记录集的详细信息,请查看以下链接。
主题 |
说明 |
---|---|
本主题介绍了如何在 Python 中使用 FeatureSet 和 RecordSet 对象。 | |
本主题介绍了如何使用要素集和记录集控件。 |
将过滤器应用于参数
将过滤器应用于参数,可以缩小用户对于参数的可用选择。例如,可设置仅限选择文本字段的字段过滤器。
地理处理将自动为字符串、长整型、双精度型、要素类、文件、字段和工作空间类型的参数创建过滤器。即使不为参数设置过滤器,参数仍会关联一个过滤器 - 只不过它是空的。空过滤器等同于没有过滤器。通过向空过滤器添加值可激活过滤器,而用户的选择会受到过滤器内容的限制:
- 过滤器仅提供在浏览数据时作出有效选择的用户。如果设置的过滤器是针对点要素类的,那么用户浏览数据时仅会显示点要素类。如果设置的过滤器是针对文本字段的,则字段的下拉列表仅显示文本字段。
- 如果由用户输入参数值(而不是从列表或文件浏览器中选择值),则会根据过滤器对值进行检查。如果用户输入无效值(例如不是文本字段,而是数值字段),则会自动给出警告或提示错误。
如果希望仅为参数输入特定的值或数据集类型,可以指定过滤器。将过滤器的类型设置为相应值。过滤器类型有六种,您可以根据参数的数据类型来选择过滤器的类型。
过滤器类型 |
值 |
---|---|
值列表 |
字符串或数值的列表。采用字符串型、长整型、双精度型和布尔型参数数据类型。 |
范围 |
最小值和最大值。采用长整型和双精度型数据类型。 |
要素类 |
允许的要素类类型列表:点、多点、折线、面、多面体、球体、注记和维度。可为过滤器提供多个值。 |
文件 |
文件后缀的列表。示例:txt;e00;ditamap。 |
字段 |
允许的字段类型列表:短整型、长整型、单精度、双精度、文本、日期、OID、几何、Blob、栅格、GUID、全局 ID 和 XML。可为过滤器提供多个值。 |
工作空间 |
允许的工作空间类型列表:文件系统、本地数据库或远程数据库。可提供多个类型值。 |
Property | Description |
---|---|
type | The type of filter (ValueList, Range, FeatureClass, File, Field, and Workspace). You can set the type of filter when dealing with Long and Double parameters (see note below). For other types of parameters, there is only one valid type of filter, so setting the type on these parameters is ignored. If you do not want to filter values, set the list property to an empty list. |
list | A Python list of values for the filter. If you do not want to filter values, set the list property to an empty list. |
通常,只可以选择一种过滤器类型。仅“长整型”和“双精度型”有两种选择:“值列表”和“范围”。
值列表
“值列表”过滤器非常有助于提供一组关键字。许多工具都具有一组预定义的关键字,如添加字段中的字段类型参数,或者叠加分析工具集中多个工具的连接属性参数。
“值列表”过滤器可用于“长整型”和“双精度”数据类型。对于这些类型,您可以输入允许的数值。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input value",
name="in_value",
datatype="GPLong",
parameterType="Required",
direction="Input")
# Set a value list of 1, 10 and 100
param0.filter.type = "ValueList"
param0.filter.list = [1, 10, 100]
如果希望用户能够选择多个值,请将 multiValue 属性设置为 True。
“值列表”还可用于“布尔”数据类型。对于“布尔”数据类型,“值列表”中包含有两个值:值 true 和值 false。值 true 始终是列表中的最初值。这些值用在命令行中指定值。相关示例,可参阅“添加字段”和用于 IsNullable 属性的 {NULLABLE | NON_NULLABLE} 关键字。
范围
“长整型”或“双精度”参数可具有范围过滤器。范围过滤器具有两个值:最小值和最大值。列表中的第一个值是最小值。包括范围边界值,这表示最小值和最大值也是有效数据。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input range",
name="in_range",
datatype="GPLong",
parameterType="Required",
direction="Input")
# Set an acceptable range of 1 to 10
param0.filter.type = "Range"
param0.filter.list = [1, 10]
要素类
对于此过滤器,可以选择一个或多个过滤器值。将根据过滤器值检查输入要素类。例如,如果只将“点”选择为过滤器值,则用户只能将点要素类作为参数值进行输入。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
param0.filter.list = ["Polygon"]
文件
文件过滤器包含文件可具有的文件后缀的列表,如 txt(简单文本文件)和 csv(逗号分隔值)。您可以提供任何后缀的文本,不必是 ArcGIS 可识别的后缀。后缀可为任意长度,且不包含句点。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input File",
name="in_file",
datatype="DEFile",
parameterType="Required",
direction="Input")
# To define a file filter that includes .csv and .txt extensions,
# set the filter list to a list of file extension names
param0.filter.list = ['txt', 'csv']
字段
字段过滤器用于定义允许的字段类型:短整型、长整型、浮点型、单精度、双精度、文本、日期、OID、几何、Blob、栅格、GUID、GlobalID、XML。可为过滤器提供多个值。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
param1 = arcpy.Parameter(
displayName="Field",
name="field",
datatype="Field",
parameterType="Required",
direction="Input")
# Set the filter to accept only fields that are Short or Long type
param1.filter.list = ['Short', 'Long']
param1.parameterDependencies = [param0.name]
工作空间
工作空间过滤器用于指定允许的输入工作空间的类型。共有三个值:
工作空间过滤器 | 说明 |
---|---|
文件系统 | 系统文件夹,用于存储 shapefile、coverage、INFO 表和格网 |
本地数据库 | 个人地理数据库或文件地理数据库 |
远程数据库 | ArcSDE 数据库连接 |
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Workspace",
name="in_workspace",
datatype="DEWorkspace",
parameterType="Required",
direction="Input")
# Set the filter to accept only local (personal or file) geodatabases
param0.filter.list = ["Local Database"]
parameterDependencies
parameterDependencies 属性有两种用途:
- 对于派生的输出参数,parameterDependencies 设置为将通过工具修改的输入参数。
- 对于输入参数,parameterDependencies 包含数据类型所使用的其他参数的名称。
# Third parameter
param2 = arcpy.Parameter(
displayName="Output Features",
name="out_features",
datatype="GPFeatureLayer",
parameterType="Derived",
direction="Output")
param2.parameterDependencies = [param0.name]
param2.schema.clone = True
只能为特定输入参数设置 parameterDependencies 属性,如下表中所示。
输入数据类型 |
相关参数数据类型 |
说明 |
---|---|---|
字段或 SQL 表达式 |
表 |
含有字段的表 |
INFO 项目或 INFO 表达式 |
INFO 表 |
包含项目的 INFO 表 |
Coverage 要素类 |
Coverage |
包含要素的 coverage |
面积单位或线性单位 |
地理数据集 |
用于确定默认单位的地理数据集 |
坐标系 |
工作空间 |
用于确定默认坐标系的工作空间 |
网络分析等级设置 |
网络数据集 |
包含等级信息的网络数据集 |
地理统计值表 |
地统计图层 |
包含表的分析图层 |
符号系统
如果工具输出的是要素集、栅格、TIN 或“网络分析图层”,则可以通过符号系统属性指定图层文件 (.lyr) 的位置。通过 ArcMap、ArcGlobe 或 ArcScene 运行工具时,如果启用了将地理处理操作的结果添加到显示中,则输出会添加到显示中,并使用符号系统图层文件中定义的符号系统进行绘制。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Raster",
name="in_raster",
datatype="DERasterDataset",
parameterType="Required",
direction="Input")
param1 = arcpy.Parameter(
displayName="Output Raster",
name="out_raster",
datatype="DERasterDataset",
parameterType="Required",
direction="Output")
# Use __file__ attribute to find the .lyr file (assuming the
# .pyt and .lyr files exist in the same folder).
param1.symbology = os.path.join(os.path.dirname(__file__),
'raster_symbology.lyr')
每次运行工具时都会读取图层文件。如果无法找到图层文件(已被移动或删除),则将使用默认的符号系统。
category
您可以通过将参数放入不同类别来最小化工具对话框的大小。Network Analyst 工具使用了各种类别,如下所示。类别字符串相同的参数将被分为一组。
类别始终显示在非类别化参数之后。不要将必选参数归类,因为这些参数在工具对话框中处于隐藏状态。