Cuando publica su resultado en el Editor de servicio, puede especificar el modo de entrada para cada parámetro de la tarea. El modo que elija determina la manera en que los clientes proporcionarán un valor para el parámetro de tarea. El objetivo de este tema es ayudarlo a comprender por qué algunas opciones del modo de entrada no están disponibles para un parámetro y sugerir métodos para crear tareas que trabajan con las opciones del modo de entrada disponibles.
Para revisar el modo de entrada, hay tres opciones, como sigue:
- Valor definido por el usuario: el cliente proporciona un valor para el parámetro.
- Lista de opciones: el cliente recibe una lista de cadenas de caracteres (la lista de opciones) y debe elegir una o más cadenas de caracteres de la lista de opciones. Según el tipo de datos de la entrada, las cadenas de caracteres en la lista de selección pueden ser los nombres de capas o las simples opciones de palabras clave.
- Valor constante: la tarea utilizará el valor suministrado para el parámetro cuando creó el resultado. Dado que el valor es constante, el cliente no puede cambiarlo, así que no será un parámetro de tarea cuando el servicio se publica.
Las opciones del modo de entrada que tiene para un parámetro en particular depende del tipo de datos del parámetro de la herramienta. Hay tres categorías de tipos de datos:
- Dataset: los datos almacenados en el disco, como una clase de entidad, tabla, carpeta, documento de mapa, base de datos, etc.
- Escalar: nada que no sea un dataset, como números y cadenas de caracteres.
- Tabla de valores: un tipo de datos especial que es una tabla de valores de múltiples columnas.
Datasets
Un servicio SIG debe funcionar con el cliente más sencillo: un navegador web que se ejecute en un ordenador sin ninguna de las prestaciones SIG. Los clientes simples saben solo como transportar (enviar y recibir) paquetes de datos simples a un servidor, como archivos de texto, números y entidades geográficas y sus atributos (campos). En el contexto de las tareas de geoprocesamiento, los datasets SIG se pueden dividir en dos categorías distintas: transportables y no transportables.
- Los datasets transportables son entidades, rásteres, tablas y archivos. Los parámetros que contienen datasets transportables admiten el modo de entrada Valor definido por el usuario.
- Los datasets no transportables son el resto de elementos que no son entidades, rásteres, tablas ni archivos. Hay dos categorías de datasets no transportables.
- Los datasets complejos son datasets como redes geométricas, datasets de red, topologías, TIN, y así sucesivamente. Estos tipos de datos se conocen como datasets complejos porque modelan relaciones complejas entre entidades simples.
- Los datasets de contenedor son elementos como carpetas, geodatabases personales y de archivos y documentos de mapa (.mxd). Estos tipos de datos contienen una recopilación mezclada de otros datasets, de allí su nombre, contenedores.
Determinar el tipo de datos de un parámetro de herramienta
Para determinar si un parámetro de tarea admite el modo de entrada Valor definido por el usuario, examínelo en el Editor de servicio y vea si el modo de entrada aparece como una opción. También puede establecer si el Valor definido por el usuario es compatible antes de entrar en el Editor de servicio determinando el tipo de datos del parámetro de herramienta utilizando cualquiera de los siguientes métodos:
- En una página de referencia de la herramienta, la sección de sintaxis incluye una tabla que describe cada parámetro. La última columna de esta tabla contiene el tipo de datos del parámetro.
- En ModelBuilder, haga clic con el botón derecho en una variable, haga clic en Propiedades y haga clic en la pestaña Tipo de datos. El tipo de datos aparecerá en la parte superior del cuadro de diálogo.
- Para una herramienta de script, en la ventana Catálogo, haga clic con el botón derecho en la herramienta de script y elija Propiedades. En el cuadro de diálogo de propiedades, haga clic en la pestaña Parámetros. El tipo de datos de cada parámetro se enumera en la tabla de parámetros.
Listas de selección y datasets no transportables
Si un valor de parámetro de entrada es una capa que hace referencia a un dataset no transportable, puede elegir Lista de opciones como una opción del modo de entrada. Por ejemplo, el parámetro Red de modo de transporte se puede usar en una tarea que encuentra la mejor ruta para el modo de transporte del usuario: vehículo, bicicleta o caminar.
El tipo de datos de este parámetro es la capa de dataset de red. Los datasets de red son datasets complejos que no pueden ser transportadas a través de la web, por lo que Valor definido por el usuario no está disponible para este parámetro. Sin embargo, puede utilizar una Lista de opciones para especificar una lista de opciones de nombres de capa para utilizar. El cliente debe seleccionar uno de los nombres de capa desde la lista de selección y su tarea utilizará la capa que el cliente elige, acceder a los dataset de red que hace referencia la capa y se almacenan en el servidor.
La mayoría de datasets complejos tienen una representación de capa correspondiente. El ejemplo anterior mostró capas de dataset de red. Otros ejemplos de datasets complejos son capas TIN, capas de estadísticas geográficas, capas de estructura de parcelas y capas de dataset LAS. Cada vez que hay un dataset no transportable, puede utilizar su representación de capas como el valor de entrada. La tarea de ejemplo anterior fue creada al ejecutar un modelo y proporcionar la capa Red de calles como entrada. Si el modelo se ejecuta al proporcionar la ruta a un dataset de red en el disco en lugar de un nombre de capa, el modo de entrada se establecerá en un Valor constante. Debe ejecutar la herramienta utilizando una capa como entrada para que aparezca la opción Lista de opciones.
En resumen:
- Los clientes pueden enviar y recibir (transportar) las entidades simples, rásteres, tablas y archivos en Internet.
- Los datasets complejos, tales como datasets de red, TIN y estructuras de parcelas, son no transportables. Los datasets de contenedor, tales como carpetas, geodatabases y documentos de mapa son también no transportables. Es decir, no hay forma de que un cliente cree estos datasets complejos o los contenedores y los transporte a través de Internet. Esto es cierto incluso para los clientes incluidos completamente, tales como ArcMap.
- La mayoría de datasets complejos tienen una representación de capas; es decir, puede agregar el dataset a ArcMap y se crea una capa en la tabla de contenido.
- Puede crear una lista de selección de nombres de capa, y el cliente debe elegir uno o más de estos nombres de capa como entrada a su tarea. Su tarea utilizará el dataset al que la capa hace referencia.
- Para crear una lista de selección de nombres de capa, debe ejecutar la herramienta utilizando una capa como entrada. En el Editor de servicio, la lista de opciones se llenará a partir de las capas en la tabla de contenido.
- Si ejecuta la herramienta mediante la ruta a un dataset en disco, la opción de la Lista de opciones no estará disponible, incluso si tiene capas del tipo correcto en la tabla de contenido.
Valor constante y datasets complejos
Si una entrada a su tarea es una ruta de acceso a un dataset complejo (por ejemplo, D:\mydata\chicago.gdb\transportation\streetnetwork; un dataset de red), el Modo de entrada estará fijo en Valor constante. Si publica el modo de entrada con el valor establecido en Valor constante, el dataset se copiará en el servidor (salvo que se encuentre en el data store del servidor) y su tarea utilizará el dataset copiado.
Si puede agregar el dataset a ArcMap para crear una capa, puede volver a ejecutar la herramienta utilizando la capa como entrada. Esto creará un nuevo resultado que se puede compartir, y el Editor de servicio admitirá la Lista de opciones como un modo de entrada.
Valor constante y datasets de contenedor
Los contenedores son elementos como carpetas, geodatabases personales y de archivos y documentos de mapa (.mxd). Estos tipos de datos contienen una recopilación mezclada de otros datasets, de allí su nombre, contenedores. Los contenedores son no transportables, y la regla general es que el contenedor y todo su contenido se copiará en el servidor (a menos que el contenedor esté en el almacenamiento de datos del servidor). y su tarea publicada utilizará el contenedor copiado. A continuación, se describen algunos contenedores comunes.
Carpetas
Si la entrada a su tarea es una carpeta, el Modo de entrada se fijará en Valor constante. Si publica el modo de entrada establecido en Valor constante, la carpeta y su contenido (ver nota siguiente) se copiará en el servidor (salvo que se encuentren en el data store del servidor) y su tarea utilizará la carpeta copiada.
Documentos de mapa (.mxd)
Si la entrada a su tarea es un documento de mapa, el Modo de entrada se fijará en Valor constante. Si publica el modo de entrada establecido en Valor constante, el documento de mapa, todas las capas y todos los datasets a los que hacen referencia las capas se copiarán en el servidor a menos que el documento de mapa se pueda encontrar en el data store del servidor. Si cualquiera de los datasets a los que se hace referencia no se pueden encontrar en el almacenamiento de datos del servidor, se copiarán en el servidor. Básicamente, el documento de mapa se comprime, se envía al servidor y, a continuación, se descomprime en el servidor.
Geodatabases
Si la entrada a su tarea es una geodatabase, el Modo de entrada se fijará en Valor constante. Si publica el modo de entrada con el valor establecido en Valor constante, la geodatabase y su contenido se copiarán en el servidor (salvo que se encuentren en el data store del servidor) y su tarea utilizará la geodatabase copiada.
Las geodatabases personales (.mdb) no son compatibles con las plataformas del servidor (sistemas operativos de 64 bits) y se convertirán a las geodatabases de archivos cuando se copien en el servidor. Las geodatabases corporativas también se convertirán en geodatabases de archivo cuando se copian en el servidor.
Salida no transportable
Si la salida de la herramienta es un dataset complejo o un dataset de contenedor, entonces no se puede transportar de vuelta al cliente. En el Editor de servicio, el parámetro de salida mostrará un tipo de datos de Cadena de caracteres. En la siguiente ilustración, el valor devuelto por la tarea será el nombre del dataset de TIN creada, no el propio dataset.
Tiene varias opciones para tratar con una salida no transportable.
- Utilice un servicio de mapas de resultado para enviar al cliente el resultado como un mapa. Ningún dataset se transporta al cliente, solo un mapa de los datos.
- Convertir el dataset a un dataset transportable. Por ejemplo, puede utilizar la herramienta De TIN a ráster para convertir un TIN (no transportable) a un dataset ráster (transportable).
- Cree un paquete de capas (.lpk) del dataset utilizando una de las herramientas en el conjunto de herramientas Vistas de capas y tabla y, a continuación, utilice la herramienta Empaquetar capa para crear el paquete de capas. Un paquete de capa es un archivo, y los archivos son transportables a través de Internet. El cliente deberá abrir el paquete.
- Utilice la utilidad ZIP para crear un archivo del dataset de resultado o carpeta y transporte el archivo .zip al cliente. El cliente es responsable de descomprimir el archivo. El ejemplo de servicio de recortar y enviar recorta las capas de un área de estudio a una geodatabase de archivos (y otros formatos) y, a continuación, crea un archivo .zipque se transportará al cliente. Si desea utilizar esta técnica, consulte los siguientes vínculos:
Escalares
Un tipo de datos de escalar no contiene nada que no sea un dataset. Los tipos de datos de escalar se conocen a veces como tipos de datos simples. Hay muchos tipos de datos escalar en geoprocesamiento, como campo (un campo en una tabla), Expresión SQL, Expresión de calculadora, Asignaciones de campos, función difusa y varios otros. Algunos se utilizan raramente. Otros, como campo y Expresión SQL son más comunes.
Los siguientes tipos de datos de escalar son totalmente compatibles con todos los clientes y pueden ser enviados y recibidos en Internet sin convertirlos: booleano, fecha, doble, unidad lineal, largo y cadena de caracteres. Cualquier otro tipo de datos escalar se convierten a una cadena de caracteres y se denominan no transportables o no compatibles.
Conversión de tipos de datos de escalares no compatibles en una cadena de caracteres rara vez es un problema, porque cada tipo de datos tiene una representación de cadena de caracteres, solo necesita saber lo que es para que pueda documentarla para el cliente. En algunos casos, es posible que desee modificar su herramienta para que se realice el trabajo de la composición de la representación de cadena de caracteres utilizando otra información facilitada por el cliente. Ambas técnicas se describen a continuación. Un tipo de datos especiales, Tabla de valores, se debate en su propia siguiente sección.
Encontrar la representación de cadena de caracteres de un parámetro
La mayoría de las representaciones de cadena de caracteres son evidentes. Por ejemplo, la representación de cadena de caracteres de un tipo de datos de campo es el nombre del campo. A veces, hay que profundizar un poco más para encontrar la representación de cadena de caracteres.
El siguiente ejemplo muestra el parámetro Radio de búsqueda de la herramienta IDW (Distancia inversa ponderada) utilizada para interpolar superficies a partir de puntos. Este parámetro tiene tres partes: el método (ya sea variable o fijo) y dos valores para la Ajustes del radio de búsqueda, como se ilustra a continuación.
- Para encontrar la representación de cadena de caracteres de este parámetro, primero vea la página de referencia de la herramienta, sección de sintaxis de parámetro. La primera columna de esta tabla contiene el nombre del parámetro y, para casos importantes, la representación de cadena de caracteres. La última columna de la tabla contiene el tipo de datos del parámetro. La siguiente ilustración muestra el contenido de la primera columna para el parámetro Radio de búsqueda referenciado anteriormente.
También puede ver la muestra del código de Python en la parte inferior de la página de referencia de la herramienta a medida que estas muestras suelen utilizar la representación de cadena de caracteres de parámetros.
- Para visualizar la representación de la cadena de caracteres de cualquier parámetro, ejecute la herramienta, haga clic con el botón derecho en la ventana Resultados y elija Copiar como fragmento de código Python. Pegue el fragmento de código en un editor de texto y examínelo. Aquí está el fragmento de código (sin parámetros iniciales para brevedad) para una ejecución de la herramienta IDW: arcpy.gp.Idw_sa(...,"2","VARIABLE 12 250","#"). Escanear a lo largo de la línea, verá que la representación de cadena de caracteres para el radio de búsqueda (concordancia con la ilustración anterior) es "VARIABLE 12 250". Puede hacer ejecuciones adicionales de la herramienta, cambiar los valores de parámetro y copiar el fragmento de código Python para examinar la representación de cadena de caracteres de cualquier parámetro.
Una vez que haya determinado la representación de cadena de caracteres, debe decir a sus clientes lo que es. Puede hacer esto en la documentación de tarea.
Más información sobre la documentación de tareas y servicios
Composición de la representación de cadena de caracteres dentro de su herramienta
Para las representaciones de cadena de caracteres que son complejas, o ponen demasiada carga en el cliente para construir la cadena de caracteres, puede modificar la herramienta para construir la cadena de caracteres para el cliente. Un buen ejemplo de ello es el tipo de datos de expresión SQL. En el modelo que se muestra a continuación, el tipo de datos del parámetro Expresión es Expresión SQL y para que este modelo se ejecute como una tarea, el cliente debe suministrar una cadena de caracteres de expresión SQL válida.
Si el propósito de la tarea es seleccionar una parcela basada en nombre del propietario, puede crear un modelo en el que el cliente introduce el nombre del propietario y una declaración se hace una declaración SQL válida para ellos. Esto es fácil de hacer utilizando la sustitución de variables, como se ilustra a continuación. La variable Nombre del propietario es un tipo de datos de cadena de caracteres; cuando el cliente introduce el nombre del propietario de la parcela, se crea una expresión SQL válida en el modelo. Puede encontrar otros ejemplos de uso de la sustitución de variables en el tema Ejemplos de sustitución de variables del modelo en línea.
Crear sus propias listas de selección
Muchas herramientas de geoprocesamiento definen listas de selección, también conocidas como los filtros de la lista de valores de cadena de caracteres, para sus parámetros. La herramienta Seleccionar capa por atributo que se muestra arriba tiene una lista de opciones de cadenas de caracteres para el parámetro Tipo de selección (NEW_SELECTION, ADD_TO_SELECTION, REMOVE_FROM_SELECTION y así sucesivamente). Puede crear sus propias listas de selección para las variables de cadena de caracteres utilizando filtros de la lista de valores.
Tablas de valores
Una Tabla de valores es una tabla de múltiples columnas utilizada en las herramientas Intersecar y Fusionar, entre otras. En la siguiente ilustración se muestra la herramienta Intersecar; su parámetro Entidades de entrada es una Tabla de valores con dos columnas: Entidades y Clasificación.
Las tablas de valores no son transportables y su Modo de entrada se fijará en un Valor constante en el Editor de servicio.
Si necesita que su cliente especifique sus propios valores en lugar de utilizar el valor constante, deberá modificar el modelo o la secuencia de comandos para que utilice otros tipos de datos además de Tabla de valores.
Las tablas de valores puede tener cualquier cantidad de filas, y cómo se puede modificar su herramienta depende de si desea que el cliente introduzca una cantidad de filas fija o variable. Si alguna de las columnas en la Tabla de valores contiene datasets, entonces la cantidad de filas tendrá que ser fija, porque cada fila necesitará su propio parámetro para contener el dataset.
La siguiente ilustración muestra una técnica que puede utilizar en ModelBuilder para intersecar dos clases de entidad, con filas, sin exponer una Tabla de valores. Las variables Calles y Parques se crean automáticamente con ModelBuilder cuando las introduce en la Tabla de valores. Las variables Clasificación de calles y Clasificación de parques se crearon de la siguiente forma:
- Crear dos variables independientes de tipo largo. Cambiarles el nombre y convertirlas en parámetros de modelo.
- Abra la herramienta Intersecar y haga clic en una celda en la columna Clasificaciones, como se ilustra a continuación. Podrá elegir una de las dos variables largas que creó.
Siempre puede crear una herramienta de secuencia de comandos que acepte las entradas individuales, construya el parámetro Tabla de valores dentro de la secuencia de comandos y, a continuación, pide la herramienta. El código siguiente realiza una intersección de dos clases de entidad sin utilizar un parámetro de Tabla de valores.
# Script tool to intersect two feature classes.
#
import arcpy
inFeatures1 = arcpy.GetParameterAsText(0) # data type = Feature layer
inRank1 = arcpy.GetParameterAsText(1) # data type = Long integer
inFeatures2 = arcpy.GetParameterAsText(2) # data type = Feature layer
inRank2 = arcpy.GetParameterAsText(3) # data type = Long integer
outFeatures = arcpy.GetParameterAsText(4) # data type = Feature class
# Default values
#
joinAttributes = "ALL"
xyTolerance = "#"
outputType = "INPUT"
# Construct the value table parameter, a list of lists
#
valueTable = [ [inFeatures1, inRank1], [inFeatures2, inRank2] ]
arcpy.Intersect_analysis(valueTable, outFeatures, joinAttributes,
xyTolerance, outputType)
El ejemplo a continuación utiliza la herramienta Disolver para demostrar mediante representaciones cadena de caracteres de parámetros y un número variable de filas en una Tabla de valores. La herramienta Disolver acepta una capa o clase de entidad de líneas o polígonos y agrega entidades basadas en valores en uno o más campos en el parámetro Campos a disolver. Durante la agregación, puede calcular las estadísticas sobre las entidades agregadas con el parámetro Campos de estadísticas: una Tabla de valores.
Mientras el cliente especifica los campos disolver y campos estadísticas que se encuentran en sus entidades de entrada, la tarea se ejecutará. Para ello, debe crear una herramienta de script que acepte la representación de cadena de caracteres de los parámetros Campos a disolver y Campos de estadísticas en lugar de presentar una lista de opciones de los campos que se encuentran en el esquema de las entidades de entrada. En efecto, está omitiendo a la inteligencia integrada en los cuadros de diálogo de la herramienta y el Editor de servicio y ejecutando la herramienta utilizando nada más que la representación de cadena de caracteres de los parámetros.
# Script tool code to do a Dissolve using strings for the Dissolve Fields(s) and
# Statistics Fields(s) parameters
#
import arcpy
inFeatures = arcpy.GetParameterAsText(0) # data type = Feature layer outFeatures = arcpy.GetParameterAsText(1) # data type = Feature class dissolveFields = arcpy.GetParameterAsText(2) # data type = String statFields = arcpy.GetParameterAsText(3) # data type = String multi_part = False # Always produce single-part features unsplit_lines = True # Only dissolve lines if the share common vertex
arcpy.Dissolve_management(inFeatures, outFeatures, dissolveFields, statFields, multi_part, unsplit_lines)
Cuando se ejecuta esta herramienta de script, deberá proporcionar la representación de cadena de caracteres para los parámetros Campos a disolver y Campos de estadísticas. Utilizando la ilustración de ejemplo anterior, Campos a disolver = DISTRICT y Campos de estadísticas = POP98 SUM;NAME FIRST. (Consulte la información anterior para obtener detalles sobre cómo encontrar la representación de cadena de caracteres de un tipo de datos.) En el Editor de servicio, puede establecer los dos parámetros para Valor definido por el usuario ya que son cadenas de caracteres.