Casi todas las herramientas tienen parámetros y sus valores se establecen en el cuadro de diálogo de la herramienta o dentro de un script. 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 script.
En una caja de herramientas de Python (.pyt), los parámetros de herramientas 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 objetos Parameter tienen muchas propiedades de lectura y escritura, pero las propiedades que se deben establecer para cada parámetro son, entre otras, las siguientes:
Propiedad | Descripción |
---|---|
displayName | El nombre del parámetro tal y como se muestra en el cuadro de diálogo de la herramienta. |
name | 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 de Python tiene un tipo de datos asociado. Al abrir el cuadro de diálogo de la herramienta de script, 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 de Python. |
parameterType | Existen tres opciones para parameterType:
|
direction | Esta propiedad define si el parámetro es una entrada de la herramienta o una salida de la herramienta. Si parameterType se ha definido como Derivado, el parámetro direction se debe definir 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 conteo, por ejemplo, obtiene un valor largo (el número 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 un script 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 el script.
Crear parámetros de valor múltiple
Si desea que un parámetro pueda gestionar una lista de valores en lugar de un solo valor, defina la propiedad multiValue como True.
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 y valores largos y dobles se utiliza una lista de casillas de verificación si 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 datatype como GPValueTable y estableciendo una propiedad columns para definir los tipos de datos y los 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 nombres de campo y valores de cadena de caracteres para Tipo de estadística (GPString). Usando un ValueListfiltro y una lista de valores, se puede generar una lista desplegable en la columna GPValueTable correspondiente. Si desea establecer valores predeterminados para un parámetro de tabla de valores, utilice la propiedad values y proporcione los valores de parámetro en una lista de valores.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName ='Input Features',
name ='in_features',
datatype ="GPFeatureLayer",
parameterType ='Required',
direction ='Input')
param1 = arcpy.Parameter(
displayName='Statistics Field(s)',
name='stat_fields',
datatype='GPValueTable',
parameterType='Required',
direction='Input')
param1.parameterDependencies = [param0.name]
param1.columns = [['Field', 'Field'], ['GPString', 'Statistic Type']]
param1.filters[1].type = 'ValueList'
param1.values = [['NAME', 'SUM']]
param1.filters[1].list = ['SUM', 'MIN', 'MAX', 'STDEV', 'MEAN']
Definir valores predeterminados para un parámetro
Los valores predeterminados se pueden configurar para un parámetro aplicando un valor directamente con la propiedad value o aplicando el valor de una variable de entorno con defaultEnvironmentName.
El valor predeterminado será el contenido del parámetro cuando se abra el cuadro de diálogo de la herramienta del script. También es el valor que se utilizará si se introduce un # para el parámetro en el script Si no se especifica value, el valor del parámetro estará vacío cuando se abra el cuadro de diálogo del script.
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 en el nombre de la configuración del entorno. Una vez que haya elegido una configuración del entorno, la propiedad value se pasará por alto.
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 Actualizar el esquema de una caja de herramientas de Python.
Cuando el tipo de datos del parámetro de entrada es Conjunto de entidades o Conjunto de registros, debe especificar fieldsRule y geometryType para 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 del script 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 value del parámetro como una clase de entidad, una tabla o un 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 | El 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 cadena de caracteres de tipo, larga, 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 filtertype en el valor adecuado. 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 texto 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 archivo, por ejemplo, ['zip', 'xml']. |
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 trabaje con los parámetros Long y Double (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 elegir más de un valor, establezca la propiedad multiValue en True.
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. Los valores se utilizan en la línea de comandos para especificar el valor. Consulte, por ejemplo, Agregar campo y las palabras clave NULLABLE y NON_NULLABLE empleadas para el parámetro Field IsNullable.
Rango
Un parámetro Long o Double 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 archivo filter contiene una lista de los sufijos de archivo que un archivo puede tener, como txt (archivo de texto simple) y csv (archivo de 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 campo filter define los tipos de campos permitidos: Short, Long, Float, Single, Double, Text, Date, OID, Geometry, Blob, Raster, GUID, GlobalID y 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 |
Base de datos remota | Conexión de base de datos corporativa |
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 finalidades:
- Para un parámetro de salida derivado, parameterDependencies se establece en 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 puede establecer parameterDependencies para determinados 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 geoestadística | Capa de geoestadística | Una tabla de los datasets y campos que se van a utilizar en las Geostatistical Analyst Tools. |
symbology
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) con la propiedad symbology. 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')
category
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.