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:
|
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:
- La salida es la misma que la entrada, como en Calcular campo o el ejemplo anterior. Calcular campo cambia los valores de un campo en particular en la tabla de entrada; no crea una tabla nueva ni modifica el esquema de la entrada. Se pueden encontrar otras herramientas en las cuales la salida es la misma que la entrada en la caja de herramientas Edición.
- La herramienta modifica el esquema de la entrada, como en Agregar campo. Agregar campo agrega un campo a la tabla de entrada; no crea una tabla de salida nueva.
- La herramienta utiliza la información en otros parámetros para crear una salida, como la herramienta Crear clase de entidad. Con la herramienta Crear clase de entidad, puede especificar el espacio de trabajo y el nombre de la nueva clase de entidad, y se crea la clase de entidad por usted.
- La herramienta genera como salida un valor escalar, a diferencia de un dataset. Obtener contador, por ejemplo, obtiene un largo (la cantidad de registros). Siempre que la herramienta obtenga un valor escalar, la salida es Derivado.
- La herramienta creará los datos en una ubicación conocida. Por ejemplo, puede tener una secuencia de comandos que actualice una tabla existente en un espacio de trabajo conocido. No es necesario que el usuario suministre esta tabla en el cuadro de diálogo o en la secuencia de comandos.
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.
- En campos, cadenas de caracteres, largos y dobles se utiliza una lista de casillas de verificación si éstos contienen un filtro ValueList.
- Todos los demás tipos de datos muestran el control de parámetro de valor múltiple.
A continuación se ilustran ambos tipos de 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.
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.
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 |
---|---|
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. |
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:
- Un filtro sólo presenta opciones válidas para el usuario cuando busca datos. Si establece el filtro para clases de entidad de punto, sólo se muestran las clases de entidad de puntos cuando el usuario busca datos. Si establece el filtro para campos de texto, la lista desplegable de campos sólo muestra los campos de texto.
- Si un usuario escribe en un valor de parámetro (en vez de elegir un valor de la lista o navegador de archivos), el valor se verifica con el filtro. Si el usuario introduce un valor no válido (un campo numérico en vez de un campo de texto, por ejemplo), se proporciona una advertencia o error automáticamente.
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. |
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. |
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:
- Para un parámetro de salida derivada, parameterDependencies se establece como el parámetro de entrada que será modificado por la herramienta.
- Para los parámetros de entrada, parameterDependencies contiene el nombre de otros parámetros utilizados por el tipo de datos.
# 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 |
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')
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.
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.