Definición de parámetros en una caja de herramientas Python

Casi todas las herramientas tienen parámetros, y sus valores se establecen en el cuadro de diálogo de la herramienta o dentro de una secuencia de comandos. Cuando se ejecuta la herramienta, los valores de parámetro se envían al código de fuente de la herramienta. La herramienta lee estos valores y continúa con su trabajo.

Para obtener más información sobre los parámetros, consulte Entender los parámetros de la herramienta de secuencia de comandos.

En una caja de herramientas de Python (.pyt), los parámetros de herramienta se definen en un método getParameterInfo de clase de herramienta mediante la creación de objetos Parameter y la definición de sus propiedades.

Los parámetros de objetos tienen muchas propiedades de lectura y escritura, pero las propiedades que se deben establecer para cada parámetro incluyen:

Propiedad

Descripción

displayName

El nombre del parámetro tal y como se muestra en el cuadro de diálogo de la herramienta.

nombre

El nombre del parámetro, como se muestra en la sintaxis de la herramienta en Python.

datatype

Cada parámetro de herramienta de la caja de herramientas Python tiene un tipo de datos asociado. Al abrir el cuadro de diálogo de la herramienta de secuencia de comandos, el geoprocesamiento utiliza el tipo de datos para comprobar el valor de parámetro.

El tipo de datos también se utiliza para examinar los datos: solo se muestran en el cuadro de diálogo los datos que coinciden con el tipo de datos del parámetro.

Para obtener una lista de tipos de datos de parámetro, consulte Definir los tipos de datos de parámetro en las cajas de herramientas Python.

Cuando hay un gran número de tipos de datos disponibles, los que se usan con más frecuencia son de cadena, doble, booleano, capa de entidades y dataset ráster.

parameterType

Existen tres opciones para parameterType:

  • Requerido: la herramienta no se puede ejecutar hasta que se proporciona un valor.
  • Opcional: El parámetro no requiere un valor.
  • Derivado: El parámetro es solo para los parámetros de salida (consulte la instrucción a continuación). Un parámetro de salida derivada no se muestra en el cuadro de diálogo de la herramienta.

dirección

Esta propiedad define si el parámetro es una entrada de la herramienta o una salida de la herramienta.

Si el parameterType se establece en Derivado, entonces el parámetro dirección se debe establecer como salida.

El ejemplo siguiente define tres parámetros para una herramienta: un parámetro de entrada que acepta una capa de entidad, un parámetro de entrada que acepta un nuevo nombre de campo y un parámetro de salida derivado que se basa en el primer parámetro de entrada. Para que los parámetros se reflejen en la herramienta, devuelva los parámetros al final del método 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

Trabajar con salidas derivadas

El último parámetro que se muestra arriba es un parámetro de salida derivada. Un parámetro de salida derivada tiene los siguientes cinco usos:

Crear parámetros de valor múltiple

Si desea que un parámetro pueda manejar una lista de valores en lugar de un solo valor, establezca la propiedad multiValue como Verdadera.

En los cuadros de diálogo de las herramientas, hay dos controles de interfaz de usuario distintos que se utilizan para los valores múltiples, como se muestra a continuación.

A continuación se ilustran ambos tipos de controles de valor múltiple.

Controles de valor múltiple

Según la ilustración anterior, si el usuario seleccionó todos los tipos de carreteras, el valor del parámetro se establece en ["Interestatales", "Carreteras principales", "Carreteras secundarias"].

def getParameterInfo(self):
    param0 = arcpy.Parameter(
        displayName="Input Features",
        name="in_features",
        datatype="GPFeatureLayer",
        parameterType="Required",
        direction="Input",
        multiValue=True)

Creación de la tabla de valores de parámetros

Algunos parámetros, denominados como Tablas de valores, le permiten especificar varias entradas. Por ejemplo, puede incluir varios datasets para el parámetro Entidades de entrada de las herramientas Incorporar, Combinación y otras, o bien puede incluir varios campos para el parámetro Campos de estadísticas de las herramientas Disolver y Resumen de estadísticas.

Ilustración del control de parámetros de valor múltiple

Los parámetros de la tabla de valores se definen configurando los tipos de datos como GPValueTable y configurando una propiedad de columnas para definir los tipos de datos y encabezados de columna del parámetro. En el ejemplo siguiente, un parámetro de la tabla de valores se define con dos columnas que aceptan las capas de entidades y los valores enteros (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']]

Para establecer valores predeterminados para un parámetro de tabla, utilice la propiedad valores y proporcione los valores de parámetro en una lista de la lista de valores.

Definir valores predeterminados para un parámetro

Los valores predeterminados se pueden configurar para un parámetro mediante la aplicación de un valor directamente con la propiedad valor o la aplicación del valor de un parámetro de entorno utilizando defaultEnvironmentName.

El valor predeterminado será el contenido del parámetro cuando se abra el cuadro de diálogo de la herramienta de la secuencia de comandos. También es el valor que se utilizará si se introduce un # para el parámetro en la secuencia de comandos Si no se especifica valor, el valor del parámetro estará vacío cuando se abra el cuadro de diálogo de la secuencia de comandos.

Definir un valor predeterminado a partir de un entorno

Puede establecer el valor predeterminado de un parámetro en el valor de una configuración del entorno estableciendo la propiedad defaultEnvironmentName para el nombre de la configuración del entorno. Una vez que haya seleccionado una configuración del entorno, la propiedad valor será ignorada.

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"

Definir esquema de parámetro

Cada parámetro de salida de tipo clase de entidad, tabla, ráster o espacio de trabajo tiene un objeto de esquema. Solo las clases de entidad de salida, las tablas, los rásteres y los espacios de trabajo tienen esquema; otros tipos, no. El objeto de esquema se crea mediante el geoprocesamiento. Accede a este esquema por medio del objeto de parámetro y configura las reglas para describir la salida de su herramienta. Después de establecer las reglas del esquema, el código de validación interna de geoprocesamiento examina las reglas que establece y actualiza la descripción de la salida.

Para obtener más información sobre el trabajo con un esquema, consulte el tema sobre el esquema.

Cuando el tipo de datos del parámetro de entrada es un Conjunto de entidades o Conjunto de registros, debe especificar el fieldsRule y geometryType de las entidades que se van a introducir.

Acerca de Conjuntos de entidades y de registros

Los tipos de datos Conjuntos de entidades y de registros permiten la entrada de datos interactiva. Un Conjunto de entidades le permite al usuario de la secuencia de comandos crear entidades de manera interactiva en ArcMap haciendo clic en el mapa. El Conjunto de registros le permite al usuario crear filas en una cuadrícula de tabla simple de manera interactiva.

Conjuntos de entidades y de registros

La simbología y el esquema (los atributos y el tipo de geometría) se pueden configurar para los controles Conjunto de entidades y Conjunto de registros mediante la configuración de la propiedad valor del parámetro como una clase de entidad, tabla o archivo de capa (. 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")

Si desea obtener más información sobre los conjuntos de entidades y de registros, visite los siguientes vínculos.

Tema

Descripción

FeatureSets y RecordSets

El tema describe cómo utilizar los objetos FeatureSet y RecordSet en Python.

Uso de los controles de entrada de entidad y registro interactivos

Este tema describe cómo utilizar los controles de los Conjuntos de entidades y de registros.

Temas sobre Conjuntos de entidades y de registros

Aplicar filtros a un parámetro

Aplicar un filtro a un parámetro permite limitar las opciones que el usuario tiene disponibles para un parámetro. Por ejemplo, puede configurar un filtro de campo que limita las opciones a solo campos de texto.

El geoprocesamiento crea filtros automáticamente para los parámetros de tipo cadena de caracteres, largo, doble, clase de entidad, archivo, campo y espacio de trabajo. Aún si no establece un filtro para el parámetro, todavía hay un filtro relacionado con el parámetro, pero está vacío. Un filtro vacío es lo mismo que no tener filtro. Al agregar valores a un filtro vacío, se activa el filtro y las opciones del usuario quedan limitadas por los contenidos del filtro:

Si desea que solo se introduzcan para un parámetro algunos tipos de dataset o valores, puede especificar un filtro. Establezca el tipo de filtro con el valor apropiado. Existen seis tipos de filtros y el tipo de filtro que puede seleccionar depende del tipo de datos del parámetro.

Tipo de filtro

Valores

Lista de valores

Una lista de valores de cadena de caracteres o numéricos. Utilizado con los tipos de datos de parámetros de cadena de caracteres, largo, doble y booleano.

Rango

Un valor mínimo y máximo. Utilizado con los tipos de datos largos y dobles.

Clase de entidad

Lista de tipos de clases de entidad permitidos: punto, multipunto, polilínea, polígono, multiparche, esfera, anotación y dimensión. Se puede proporcionar más de un valor al filtro.

Archivo

Una lista de sufijos de archivos. Ejemplo: txt; e00; ditamap.

Campo

Lista de tipos de campo permitidos: corto, largo, único, doble, texto, fecha, OID, geometría, Blob, ráster, GUID, GlobalID y XML. Se puede proporcionar más de un valor al filtro.

Espacio de trabajo

Una lista de los tipos de espacio de trabajos permitidos: sistema de archivos, base de datos local o base de datos remota. Se puede proporcionar más de un valor.

Tipo y valores de filtro

Propiedad

Descripción

type

El tipo de filtro (ValueList, Range, FeatureClass, File, Field y Workspace). Puede establecer el tipo de filtro cuando lidie con parámetros largos y dobles (consulte la nota a continuación). Para otros tipos de parámetros, hay sólo un tipo de filtro válido, de modo que se ignora la configuración del tipo de estos parámetros. Si no desea filtrar los valores, establezca la propiedad de lista a una lista vacía.

list

Un lista de Python de valores del filtro. Si no desea filtrar los valores, establezca la propiedad de lista a una lista vacía.

Propiedades de filter

Por lo general, existe solo un tipo de filtros que puede seleccionar. Solo Largo y Doble tienen dos opciones: Lista de valores y Rango.

Lista de valores

El filtro de lista de valores resulta muy útil para proporcionar un conjunto de palabras clave. Muchas herramientas tienen un conjunto de palabras clave predefinido, como el parámetro Tipo de campo que se encuentra en Agregar campo o el parámetro Unir atributos de muchas de las herramientas del conjunto de herramientas de superposición.

Se puede utilizar un filtro de lista de valores para los tipos de datos Largo y Doble. Introduzca los valores numéricos permitidos para estos tipos.

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]

Si desea que el usuario pueda seleccionar más de un valor, establezca la propiedad multiValue como Verdadera.

Se puede utilizar una Lista de valores para los tipos de datos booleanos. En los tipos de datos booleanos, la lista de valores contiene dos valores: el valor verdadero y el valor falso. El valor verdadero es siempre el primer valor de la lista. Estos valores se utilizan en la línea de comandos para especificar el valor. Consulte, por ejemplo, Agregar campo y las palabras clave {NULLABLE | NON_NULLABLE} utilizadas para la propiedad IsNullable.

Rango

Un parámetro largo o doble puede tener un filtro de rango. Los filtros de rango tienen dos valores: el mínimo y el máximo. El primer valor de la lista es el mínimo. El rango es inclusivo, lo que significa que tanto el mínimo como el máximo son opciones válidas.

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]

Clase de entidad

Para este filtro, seleccione uno o más valores de filtro. Las clases de entidad de entrada se verificarán según estos valores de filtro. Entonces, por ejemplo, si selecciona solo Punto como valor de filtro, el usuario solo podrá introducir clases de entidad de puntos como valor de parámetro.

def getParameterInfo(self):
    param0 = arcpy.Parameter(
        displayName="Input Features",
        name="in_features",
        datatype="GPFeatureLayer",
        parameterType="Required",
        direction="Input")
    param0.filter.list = ["Polygon"]

Archivo

El filtro de archivo contiene una lista de sufijos de archivo que puede contener un archivo, como txt (archivo de texto simple) y csv (valores separados por comas). Puede proporcionar cualquier texto como sufijo, no tiene que ser necesariamente un sufijo que ArcGIS reconozca. El sufijo puede tener cualquier longitud y no incluye el punto.

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']

Campo

El filtro de campos define los tipos de campo permitidos: Corto, Largo, Flotante, Único, Doble, Texto, Fecha, OID, Geometría, Blob, Ráster, GUID, GlobalID, XML. Se puede proporcionar más de un valor al filtro.

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]

Espacio de trabajo

El filtro del espacio de trabajo especifica los tipos de espacios de trabajo de entrada que se permiten. Hay tres valores:

Filtros de espacio de trabajo

Descripción

Sistema de archivos

Una carpeta del sistema, que se utiliza para almacenar shapefiles, coberturas, tablas INFO y cuadrículas

Base de datos local

Una geodatabase de archivos o personal

Base de datos remota

Una conexión de base de datos de 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

La propiedad parameterDependencies tiene dos propósitos:

# 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

Solo pueden establecer parameterDependencies para ciertos parámetros de entrada, como se muestra en la tabla siguiente.

Tipo de datos de entrada

Tipo de datos del parámetro Dependant

Descripción

Campo o expresión de SQL

Tabla

La tabla que contiene los campos

Elemento de INFO o expresión de INFO

Tabla INFO

La tabla INFO que contiene los elementos

Clase de entidad de cobertura

Cobertura

La cobertura que contiene las entidades

Unidades de área o unidades lineales

GeoDataset

Un dataset geográfico utilizado para determinar las unidades predeterminadas

Sistema de coordenadas

Espacio de trabajo

Un espacio de trabajo utilizado para determinar el sistema de coordenadas predeterminado

Configuración de jerarquía de Network Analyst

Dataset de red

El dataset de red que contiene la información de jerarquía

Tabla de valores de estadísticas geográficas

Capa de estadísticas geográficas

La capa de análisis que contiene tablas

tipos de datos de parameterDependencies

simbología

Si la salida de la herramienta es un conjunto de entidades, ráster, TIN o Capa de Network Analyst, puede especificar la ubicación de un archivo de capa (.lyr) en la propiedad Simbología. Cuando la herramienta se está ejecutando desde ArcMap, ArcGlobe o ArcScene, y Agregar los resultados de las operaciones de geoprocesamiento a la visualización se encuentra activado, la salida se agrega a la visualización y se dibuja utilizando la simbología definida en el archivo de simbología de capa.

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')
NotaNota:

El archivo de capa se lee cada vez que se ejecuta la herramienta. Si no se puede encontrar el archivo de capa (porque su ubicación cambió o se lo eliminó), se utilizará la simbología predeterminada.

categoría

Puede colocar parámetros en categorías diferentes para minimizar el tamaño del cuadro de diálogo de la herramienta. Las herramientas de Network Analyst utilizan categorías, como se muestra a continuación. Los parámetros con la misma cadena de categoría se agruparán juntos.

Categorías de parámetro

Las categorías siempre se muestran después de los parámetros no categorizados. No coloque los parámetros requeridos en categorías, porque están ocultos en el cuadro de diálogo de la herramienta.

Temas relacionados

5/9/2014