Cuando publica su resultado en el Editor de servicio, puede especificar el modo de entrada para cada parámetro de 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 selección: el cliente recibe una lista de cadenas de caracteres (la lista de selección) y debe elegir una o más cadenas de caracteres de la lista de selección. 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, una carpeta, un documento de mapa, la base de datos, y así sucesivamente.
- 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 tiene que funcionar con el más simple de todos los clientes: Un navegador web que se ejecuta en un equipo que no tiene las capacidades 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: no transportables y transportables.
- Datasets transportablesson entidades, rásteres, tablas y archivos. Los parámetros que contienen datasets transportables admiten el modo de entrada Valor definido por el usuario.
- Datasets no transportables son nada más que las entidades, rásteres, tablas y archivos. Hay dos categorías de datasets no transportables.
- Datasets complejosson 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 puede examinarlo en el Editor de servicio y ver 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 al determinar el tipo de datosdel 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.
- Haga clic con el botón derecho en la variable, haga clic en Propiedades y, a continuación, 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 secuencia de comandos, en la ventana Catálogo, haga clic en la herramienta de secuencia de comandos 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 selección como una opción del modo de entrada. Por ejemplo, la siguiente ilustración muestra el parámetro Red de modo de transporte 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, así que Valor definido por el usuario no está disponible para este parámetro. Sin embargo, puede utilizar una Lista de selección para especificar una lista de selección 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. Existen las capas TIN, capas de estadísticas geográficas, capas de estructura de parcela, capas de dataset LAS, y así sucesivamente. 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 selección.
En resumen:
- Los clientes pueden enviar y recibir (transportar) las entidades simples, rásteres, tablas y archivos en Internet.
- Datasets complejos, tales como datasets de red, estructuras de parcela, TIN, etc., son no transportables. Los datasets de contenedor, como carpetas, geodatabases, documentos de mapas, etc., son también non 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án 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 selección 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 selección no estará disponible, incluso si tiene capas del tipo correcto en la tabla de contenido.
Nota:
Cuando publica una lista de selección de nombres de capa, los datos a los que hacen referencia las capas se convierten en datos de proyecto y se copiarán en el servidor SIG, salvo que se puedan encontrar en el almacenamiento de datos del servidor.
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), elModo 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 (si no es que se encuentran en el almacenamiento de datos 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 puede compartir, y el Editor de servicio admitirá la Lista de selección como un modo de entrada.
Nota:
Las capas no se pueden hacer para redes geométricas. Los parámetros que contienen redes geométricas siempre tendrán su modo de entrada establecido en Valor constante.
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 (si no es que se encuentran en el almacenamiento de datos del servidor) y su tarea utilizará la carpeta copiada.
Nota:
Cuando las carpetas se copian en el servidor como parte del proceso de publicación, solo los archivos y los geodatasets se copian; ninguna subcarpeta dentro de la carpeta se copia. Algunos geodatasets, como las geodatabases de archivos, rásteres y TINS son técnicamente carpetas, pero se copiarán en el servidor si se encuentra dentro de la carpeta que se va a copiar.
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 almacenamiento de datos 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. Esencialmente, 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 (si no es que se encuentran en el almacenamiento de datos del servidor) y su tarea utilizará la geodatabase copiada.
Las geodatabases personales (.mdb) no son compatibles con las plataformas del servidor (Windows de 64 bit y Linux) y se convertirán a las geodatabases de archivo cuando se copian 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 (non-transportables) a un dataset ráster (transportables).
- Crear un paquete de capas (.lpk) del dataset utilizando una de las herramientas en el conjunto de herramientas Vistas de capas y tablay, a continuación, utilice la herramienta Capa de paquete 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 .zip archivo que se transporta 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 la conversión: Booleana, 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. Hay tres partes para este parámetro: el método (ya sea variable o fijo) y dos valores para la Configuración 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 cadena de caracteres de cualquier parámetro, ejecute la herramienta, haga clic 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 (parámetros iniciales quitados 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 acerca de la documentación, 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 sustitución de variables, como se ilustra a continuación. El la variable Nombre del propietario es un tipo de datos de cadena de caracteres; el cliente introduce el nombre del propietario de la parcela y una expresión SQL válida se crea en el modelo. Otros ejemplos de utilizar la sustitución de variables se pueden encontrar en el tema Ejemplos de sustitución de variable 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 selección 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 ilustración a continuación se muestra la herramienta Intersecar y su parámetro Entidades de entrada es una Tabla de valores con dos columnas: Entidades y Clasificar.
Las tablas de valores se no transportables y su Modo de entrada se fijarán 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 mediante 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 de parámetros de cadena de caracteres 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 Campos a disolver el parámetro (s) . 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 secuencia de comandos que acepta 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 selección 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 esta herramienta de secuencia de comandos se ejecuta, deberá proporcionar la representación de cadena de caracteres para los parámetros Campo de disolver y Campos de estadísticas. Utilizando la ilustración de ejemplo anterior, Campos de disolver= DISTRICT y Campos de estadísticas = POP98 SUM;NAME FIRST. (Vea arriba 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 las dos parámetros para Valor definido por el usuario ya que son cadenas de caracteres.