定义 Python 工具箱中的参数

几乎所有工具都具有参数,可在工具对话框或脚本中设置参数值。执行工具时,会将参数值发送到该工具的源代码。工具将读取这些值,然后继续执行操作。

要了解有关参数的详细信息,请参阅了解脚本工具参数

在 Python 工具箱 (.pyt) 中,通过创建参数对象并设置其属性在工具类的 getParameterInfo 方法中定义工具参数。

参数对象具有多个读写属性,但必须为每个参数设置的属性包括:

属性

描述

displayName

工具对话框中显示的参数名称。

名称

Python 中的工具语法中显示的参数名称。

数据类型

每个 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 = [['Feature Layer', 'Features'], ['Long', '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 为“要素集”或“记录集”时,用户必须指定要输入的要素的 fieldsRulegeometryType

关于要素集和记录集

要素集和记录集的数据类型允许交互输入数据。要素集允许脚本的用户通过单击地图在 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")

有关要素集和记录集的详细信息,请查看以下链接。

主题

描述

FeatureSet 和 RecordSet

本主题介绍了如何在 Python 中使用 FeatureSet 和 RecordSet 对象。

使用交互式要素和记录输入控件

本主题介绍了如何使用要素集和记录集控件。

关于要素集和记录集的主题

将过滤器应用于参数

将过滤器应用于参数,可以缩小用户对于参数的可用选择。例如,可设置仅限选择文本字段的字段过滤器。

地理处理将自动为字符串、长整型、双精度型、要素类、文件、字段和工作空间类型的参数创建过滤器。即使不为参数设置过滤器,参数仍会关联一个过滤器 - 只不过它是空的。空过滤器等同于没有过滤器。通过向空过滤器添加值可激活过滤器,而用户的选择会受到过滤器内容的限制:

如果希望仅为参数输入特定的值或数据集类型,可以指定过滤器。将过滤器类型设置为相应值。过滤器类型有六种,您可以根据参数的数据类型来选择过滤器的类型。

过滤器类型

值列表

字符串或数值的列表。采用字符串型、长整型、双精度型和布尔型参数数据类型。

范围

最小值和最大值。采用长整型和双精度型数据类型。

要素类

允许的要素类类型列表:点、多点、折线、面、多面体、球体、注记和维度。可为过滤器提供多个值。

文件

文件后缀的列表。示例:txt;e00;ditamap。

字段

允许的字段类型列表:短整型、长整型、单精度、双精度、文本、日期、OID、几何、Blob、栅格、GUID、全局 ID 和 XML。可为过滤器提供多个值。

工作空间

允许的工作空间类型列表:文件系统、本地数据库或远程数据库。可提供多个类型值。

过滤器类型和值

属性

描述

type

过滤器的类型(ValueList、范围、要素类、文件、字段和工作空间)。在处理长整型参数和双精度型参数时,可设置过滤器的类型(请参阅下面的注释)。对于其他类型的参数,仅有一种有效的过滤器类型,所以可以忽略这些参数的类型设置。如果不想过滤值,可将列表属性设置为空列表。

list

过滤器的 Python 值列表。如果不想过滤值,可将列表属性设置为空列表。

filter 属性

通常,只可以选择一种过滤器类型。仅“长整型”和“双精度型”有两种选择:“值列表”和“范围”。

值列表

“值列表”过滤器非常有助于提供一组关键字。许多工具都具有一组预定义的关键字,如添加字段中的字段类型参数,或者叠加分析工具集中多个工具的连接属性参数。

“值列表”过滤器可用于“长整型”和“双精度”数据类型。对于这些类型,您可以输入允许的数值。

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栅格GUIDGlobalIDXML。可为过滤器提供多个值。

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 属性有两种用途:

# 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

面积单位或线性单位

地理数据集

用于确定默认单位的地理数据集

坐标系

工作空间

用于确定默认坐标系的工作空间

网络分析等级设置

网络数据集

包含等级信息的网络数据集

地理统计值表

地统计图层

包含表的分析图层

parameterDependencies 数据类型

符号系统

如果工具输出的是要素集、栅格、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')
注注:

每次运行工具时都会读取图层文件。如果无法找到图层文件(已被移动或删除),则将使用默认的符号系统。

类别

您可以通过将参数放入不同类别来最小化工具对话框的大小。Network Analyst 工具使用了各种类别,如下所示。类别字符串相同的参数将被分为一组。

参数类别

类别始终显示在非类别化参数之后。不要将必选参数归类,因为这些参数在工具对话框中处于隐藏状态。

相关主题

5/10/2014