Tipos de datos de entrada y de salida
Como se describe en Conceptos clave sobre los servicios de geoprocesamiento, sólo se pueden utilizar ciertos tipos de datos como parámetros de entrada y de salida para los servicios de geoprocesamiento.
Debido a que los procesos dentro del modelo o secuencia de comandos que se publicó se ejecutan en el servidor donde todos los tipos de datos están disponibles, puede utilizar cualquier tipo de datos para los procesos del modelo o secuencia de comandos. Sólo están limitados los tipos de datos del parámetro de entrada y de salida.
Hay cuatro niveles de compatibilidad de tipos de datos:
- Completamente compatible con todos los clientes.
- Compatible sólo con los clientes de ArcGIS Desktop.
- No se permite en cualquier cliente. Algunos tipos de datos, tales como TIN, no se permiten para los parámetros de entrada y el modelo no se publicará. Recibirá un error cuando publique, como se ilustra a continuación.
- El tipo de datos se transforma a un tipo de datos de Cadena de caracteres. Por ejemplo, un tipo de datos de unidad de área se convertirá en un tipo de datos de cadena de caracteres en la tarea publicada.
Es posible que tenga que modificar los modelos y las secuencias de comandos que funcionan en ArcGIS Desktop para que sólo utilicen tipos de datos de entrada y de salida compatibles antes de que se pueden publicar en ArcGIS Server.
Tipos de datos de entrada
La tabla siguiente resume los tipos de datos de parámetro de entrada clave para los tres clientes.
Tipo de datos del parámetro de entrada |
¿Compatible con los clientes de ArcGIS Desktop? |
¿Compatible con el cliente de ArcGIS Explorer? |
¿Compatible con los clientes de la aplicación Web? |
---|---|---|---|
Conjunto de entidades |
Sí |
Sí |
Sí |
Conjunto de registros |
Sí |
Sí |
Sí |
Clase de entidad |
No (pero la Clase de entidad de entidad de entrada es compatible indirectamente con el tipo de datos del Conjunto de entidades). |
No |
No |
Tabla |
No (pero la entrada de Tabla es compatible indirectamente con el tipo de datos del Conjunto de registros). |
No |
No |
ráster |
Sí |
No |
No |
Tipos estándar (como Long, Double, Boolean, Date, String) y unidad lineal (por ejemplo "1000 metros") |
Sí |
Sí |
Sí |
Archivo (como un archivo .zip o .xml) |
Sí |
Sí |
Sí |
Capa (cualquier tipo de capa: por ejemplo, capa de entidad, capa ráster, capa de Network Analyst) |
Sólo las capas que se encuentran en el servicio de mapas resultante o el documento de mapa de origen |
Sólo las capas que se encuentran en el servicio de mapas resultante o el documento de mapa de origen |
Sólo las capas que se encuentran en el servicio de mapas resultante o el documento de mapa de origen |
Para cualquier tipo de datos de entrada de la lista anterior, ocurrirá una de las dos situaciones cuando publique el modelo o secuencia de comandos:
- La herramienta se publicará, pero el tipo de datos se convertirá a un tipo de datos de cadena de caracteres que contenga la representación de cadena de los datos.
- La herramienta no se publicará, y obtendrá un error. Los tipos de datos que tienen como resultado la publicación de errores son
- Cualquier geodataset (tal como una Clase de entidad) o tabla, excepto el ráster
- Elemento de datos
- Tabla de valores/Valor múltiple
- Variables de modelo que son Listas
Clases de entidad y tablas
Los tipos de datos de Tabla y de Clase de entidad no son compatibles como parámetros de entrada porque dependen de grandes bibliotecas de software que no se pueden instalar con clientes sencillos, tales como las aplicaciones Web y de ArcGIS Explorer. Debido a esto, el geoprocesamiento contiene dos tipos de datos sencillos, Conjunto de entidades y Conjunto de registros, que puede sustituir por los tipos de datos Tabla y Clase de entidad.
Los Conjuntos de entidades permiten que todos los clientes Web digitalicen de manera interactiva las entidades en un mapa. En ArcGIS Desktop, el tipo de datos Conjunto de entidades le permite introducir una clase de entidad existente, como se ilustra a continuación. Se permiten las clases de entidades en ArcGIS Desktop porque las bibliotecas de software requeridas están disponibles. Del mismo modo, Conjunto de registros permite que todos los clientes creen de manera interactiva registros de tablas y en ArcGIS Desktop, además puede especificar una tabla existente.
Datasets ráster
Los servicios de geoprocesamiento que tienen entradas de dataset Ráster sólo funcionan en los clientes de ArcGIS Desktop. En un cliente de ArcGIS Explorer, el servicio no se puede agregar como una tarea. En las aplicaciones Web, el servicio devolverá un error.
Tipos de datos de salida
La tabla siguiente resume los tipos de datos de parámetro de salida clave para los tres clientes. Después de esta tabla hay notas sobre cada tipo de datos.
Tipo de datos del parámetro de salida |
¿Compatible con los clientes de ArcGIS Desktop? |
¿Compatible con el cliente de ArcGIS Explorer? |
¿Compatible con los clientes de la aplicación Web? |
---|---|---|---|
Clase de entidad |
Sí |
Sí |
Sí |
Capa de entidades |
Sí |
Sí |
Sí |
ráster |
Sí |
No, sólo se puede visualizar por medio de un servicio de mapas resultantes |
No, sólo se puede visualizar por medio de un servicio de mapas resultantes |
Capa ráster |
Sí |
No |
No |
Geodataset (distinto de clase de entidad o ráster) |
No, sólo se puede visualizar por medio de un servicio de mapas resultantes |
No, sólo se puede visualizar por medio de un servicio de mapas resultantes |
No, sólo se puede visualizar por medio de un servicio de mapas resultantes |
Tabla |
Sí |
No (los servicios que tienen un tipo de datos de tabla como un parámetro de salida no se mostrarán en la lista de tareas disponibles). |
Sí |
Tipos estándar (como Long, Double, Boolean, Date, String) y unidad lineal (por ejemplo "1000 metros") |
Sí (se visualizan en el resultado del servicio que se encuentra en la ventana Resultados) |
Sí (se visualizan en la ventana Resultado de tarea) |
Sí |
Archivo |
Sí |
Sí |
Sí |
Para cualquier tipo de datos de la lista anterior, ocurrirá una de las dos situaciones cuando publique el modelo o secuencia de comandos:
- La herramienta se publicará, pero el tipo de datos se convertirá a un tipo de datos de cadena de caracteres que contenga la representación de cadena de los datos.
- La herramienta no se publicará, y obtendrá un error.
Si está utilizando un servicio de mapas de resultado para dibujar los datos de salida, la tarea puede generar la salida en cualquier geodataset, ya que el servicio de mapas de resultado dibujará el geodataset y enviará un mapa de vuelta al cliente (en lugar del mismo dataset).
Clase de entidad
El tipo de datos de la Clase de entidad es compatible como un tipo de datos de salida. Cuando publica un modelo o secuencia de comandos, la herramienta se escanea y si se encuentra una Clase de entidad de salida, se convierte en un Conjunto de entidades de salida, que se transporta de vuelta al cliente. Esta transformación ocurre de forma invisible; el modelo o secuencia de comandos no cambia. Sólo ocurre con las clases de entidades de salida porque la transformación se realiza en el servidor, que tiene todas las bibliotecas de software necesarias para realizar la transformación. Por lo tanto, técnicamente hablando, las Clases de entidades no son compatibles como salidas; se permiten porque ArcGIS Server sabe cómo transformarlas al tipo de datos compatible de Conjunto de entidades.
Capas de entidades geográficas
Una capa de entidad hace referencia a una clase de entidad en el disco y es compatible con un conjunto de entidades seleccionadas que son el resultado de una consulta de atributos o espacial. Puede crear las capas de entidades mediante la herramienta Crear capa de entidades y realizar las consultas mediante las herramientas Seleccionar capa por atributo y Seleccionar capa por ubicación. No resulta extraño que las tareas de geoprocesamiento generen la salida en capas de entidades que contienen selecciones.
Cuando ArcGIS Server encuentra una capa de entidad de salida, las entidades seleccionadas se convierten en una clase de entidad y sólo las entidades seleccionadas se transportan de vuelta al cliente.
Las capas de entidades de salida no funcionan en los servicios de mapas de resultado.
Cuando utilice los servicios de mapas de resultado, es importante tener en cuenta que hay dos servicios: el servicio de geoprocesamiento y el servicio de mapas de resultado. Estos dos servicios se ejecutan independientemente el uno del otro. Cuando se ejecuta la tarea, ArcGIS Server ejecuta la tarea de geoprocesamiento primero, y después ejecuta el servicio de mapas resultante para dibujar la salida del servicio de geoprocesamiento. Las capas de entidades son objetos temporales que se mantienen en la memoria mientras dura la tarea de ejecución. Una vez que finaliza la tarea, estas capas de entidades en memoria desaparecen. Si el servicio de mapas de resultado hace referencia a la misma clase de entidad que se encuentra en la capa, toda la información sobre las entidades seleccionadas (es decir, el resultado de la tarea) desaparecerá cuando el servicio de mapas dibuje todas las entidades. Si necesita un servicio de mapas para dibujar las entidades seleccionadas en una capa, primero debe guardar las entidades seleccionadas en una clase de entidad mediante la herramienta Copiar entidades utilizando la capa de entidad como entrada. Copiar entidades sólo copiará las entidades seleccionadas en la capa. Después puede dibujar las entidades que se copiaron con un servicio de mapas de resultado.
Datasets ráster
Los datasets ráster son compatibles como salida sólo en los clientes de ArcGIS Desktop.
Capas ráster
Como las capas de entidades, puede generar la salida en una capa ráster sólo en los clientes de ArcGIS Desktop. Cuando ArcGIS Server encuentra una capa ráster de salida, el ráster se transporta de vuelta al cliente. Las capas ráster de salida no funcionan en los servicios de mapas de resultado por la misma razón que no funcionan las capas de entidades, como se describió anteriormente.
Otras capas
Sólo las capas de entidades y las capas ráster son compatibles como salida (y, como ya se mencionó, las capas ráster sólo son compatibles con los clientes de ArcGIS Desktop). Todos los otros tipos de capas, tales como las capas NetCDF, capas de Análisis de red y capas de Análisis de estadísticas geográficas, no son compatibles.
Otros geodatasets
No se puede transferir de vuelta al cliente los datos de los tipos de datos de geodataset de salida además de los de la Clase de entidad o Ráster (tal como TIN o Terreno). Sin embargo, el servicio de geoprocesamiento puede tener un servicio de mapas de resultado para visualizar los datos y el resultado del servicio de geoprocesamiento será una capa de servicio de mapas que se pueda dibujar en cualquier cliente.
Tabla
El tipo de datos Tabla, al igual que el tipo de datos Clase de entidad también es compatible, se transforma en un Conjunto de registros para transportar de vuelta al cliente.
Estrategias para los tipos de datos no compatibles
Si el modelo o la secuencia de comandos que desea publicar tiene tipos de datos de salida o de entrada no compatibles, o el tipo de datos se convierte en una cadena de caracteres, debe modificar el modelo o la secuencia de comandos de modo que sólo utilice los tipos de datos de salida y de entrada compatibles. Hay dos estrategias generales que puede emplear:
- Utilizar la representación de cadena de caracteres.
- Convertir los datos en un archivo.
Utilizar la representación de cadena de caracteres
Cada tipo de datos tiene una representación de cadena de caracteres. Para obtener más información sobre las representaciones de cadena de caracteres, consulte Tipos de datos para el geoprocesamiento de los parámetros de la herramienta.
Si una entrada a su modelo es uno de los tipos de datos que se convirtió a una cadena de caracteres cuando se publicó en ArcGIS Server, puede modificar el modelo para que acepte la entrada de cadena de caracteres y a continuación convertir la cadena de caracteres en el tipo de datos que desea. La siguiente demostración le muestra cómo realizar esta conversión. Este ejemplo primero muestra cómo convertir un valor de tipo de datos en una cadena de caracteres, que es lo opuesto de lo que necesita hacer para el modelo, pero demuestra un concepto importante: todos los tipos de datos tienen una representación de cadena de caracteres. La segunda parte del ejemplo muestra cómo convertir una cadena de caracteres en un valor de tipo de datos: el método que utilizaría en el servicio.
El tipo de datos utilizado para la demostración es Unidad de área.
La primera parte de esta demostración determina el formato de la cadena de caracteres de una Unidad de área.
- Crear un modelo nuevo.
- Cree una variable con un tipo de datos de Unidad de área y cámbiele el nombre Input AU.
- Agregue la herramienta Calcular valor.
- Haga doble clic en Calcular valor para abrir el cuadro de diálogo. Para el parámetro Expresión introduzca %Input AU%. Esto da la orden a Calcular valor de leer el contenido de la variable Input AU. Para el parámetro Tipo de datos, elija Cadena de caracteres, como se ilustra a continuación.
- Opcionalmente, puede hacer de la variable Input AU una condición previa para Calcular valor. Una condición previa significa que la variable debe contener un valor antes de que se ejecute la herramienta. Los conectores de condición previa se muestran como líneas con guiones, como se ilustra a continuación.
- Haga doble clic en la variable Input AU y establezca el valor en 1.000 metros cuadrados.
- Haga clic en Aceptar.
- Ejecute el modelo en ModelBuilder. Haga doble clic en output_value y examine su valor. El valor es la representación de la Unidad de área, como se ilustra a continuación. Tenga en cuenta cómo la representación de la cadena de caracteres no contiene un espacio entre Metros y Cuadrados.
Como se demostró anteriormente, todos los valores de tipo de datos tienen una representación de cadena de caracteres. Puede utilizar Calcular valor para visualizar la representación de cadena de caracteres de cualquier tipo de datos. Por ejemplo, puede introducir una variable de Referencia espacial en Calcular valor para visualizar su representación de cadena de caracteres.
Los siguientes pasos le muestran cómo convertir una variable de cadena de caracteres en otro tipo de datos. Los pasos son los mismos que los anteriores, excepto que la variable de entrada es una Cadena de caracteres y la salida es una Unidad de área.
- Crear un modelo nuevo.
- Cree una variable con un tipo de datos de Cadena de caracteres y cámbiele el nombre a Input AU String, como se ilustra a continuación.
- Agregue la herramienta Calcular valor.
- Haga doble clic en Calcular valor para abrir el cuadro de diálogo. Para el parámetro Expresión introduzca %Input AU String%. Esto da la orden a Calcular valor de leer el contenido de la variable Input AU String.
Para el parámetro Tipo de datos, elija Unidad de área, como se ilustra a continuación.
- Opcionalmente, puede hacer de la variable Input AU String una condición previa para Calcular valor. Una condición previa significa que la variable debe contener un valor antes de que se ejecute la herramienta. Los conectores de condición previa se muestran como líneas con guiones, como se ilustra a continuación.
- Haga doble clic en la variable Input AU String y establezca su valor a 1.000 metroscuadrados.
- Haga clic en Aceptar.
- Ejecute el modelo en ModelBuilder. Haga doble clic en output_value y examine su valor. El valor es una Unidad de área, como se ilustra a continuación. El tipo de datos de output_value realmente es Cualquier valor, no la Unidad de área. Un tipo de datos de Cualquier valor es un tipo de datos genérico que se puede conectar a cualquier parámetro de herramienta.
Esta técnica de conversión también se demuestra en el modelo Seleccionar capa por área que se encuentra en el ejemplo de Servicio GP: Seleccionar datos.
La siguiente ilustración muestra un modelo que utiliza la herramienta Simplificación de la construcción, que toma una Unidad de área como entrada. Debido a que la Unidad de área no es un tipo de datos de parámetro de entrada compatible para los servicios de geoprocesamiento, el parámetro de entrada del modelo Área mínima es una Cadena de caracteres que se convierte en una Unidad de Área utilizando el método anterior. La variable output_value se conecta al parámetro Área mínima de Simplificación de la construcción mediante la herramienta Agregar conexión de ModelBuilder ().
Utilizar esta técnica requiere que el usuario de la herramienta introduzca la cadena de caracteres correcta. Por ejemplo, si se introduce 1.000 metros cuadrados (en lugar de 1.000 metroscuadrados) a Calcular valor, la Unidad de área resultante estará vacía. No importa si las letras están en mayúscula o minúscula: es decir, SquareMETERS y squareMeters son equivalentes.
Si desea proporcionar más verificación de error en el proceso de convertir una cadena de caracteres en un tipo de datos, puede escribir una herramienta de secuencia de comandos para hacer la conversión del tipo de datos y agregar la verificación del error en la secuencia de comandos. El siguiente código de Python muestra la idea básica.
import arcpy # Get the string and call SetParameterAsText on the output # in_string = arcpy.GetParameterAsText(0) # Do error checking/conversion here, converting "meters squared" # to "squaremeters" for example # Set the output parameter # arcpy.SetParameterAsText(1, in_string)
Como se ilustra a continuación, el tipo de datos de entrada de la herramienta sería la Cadena de caracteres y el tipo de datos de salida sería el tipo de datos de destino (tal como Unidad de área). El Tipo de parámetro de salida es Derivado.
Convertir los datos en un archivo
Una técnica que pueda utilizar para los espacios de trabajo basados en la carpeta (geodatabase de archivos, coberturas y shapefiles) es darle la orden al usuario de que utilice la utilidad de compresión ZIP para hacer un archivo .zip fuera de un espacio de trabajo y a continuación introduzca el archivo .zip en la herramienta. Dentro del servicio de geoprocesamiento, puede utilizar la secuencia de comandos descomprimir (ver a continuación) para descomprimir el archivo en un espacio de trabajo y proceder desde ahí. Esto también sucede con las salidas: puede crear un archivo .zip de un espacio de trabajo y utilizarlo para la salida.
A continuación hay vínculos para las dos secuencias de comandos Python, zip.py y unzip.py.
- La secuencia de comandos zip.py toma un espacio de trabajo de entrada (geodatabase de archivos, una carpeta que contiene coberturas o una carpeta que contiene shapefiles: cualquiera excepto una geodatabase personal o corporativa) y un nombre de archivo de salida y crea un archivo ZIP comprimido. Debería agregar el sufijo .zip al nombre del archivo de salida: la secuencia de comandos no agrega automáticamente el sufijo.
Las propiedades del parámetro son las siguientes:
Parámetros Zip.pyEtiqueta
Tipo de datos
Tipo
Dirección
Espacio de trabajo de entrada
Espacio de trabajo
Requerido
Entrada
Archivo de salida
Archivo
Requerido
Salida
- La secuencia de comandos unzip.py toma un archivo .zip, una ubicación de salida (una carpeta existente) y un nombre de salida (que se convierte en una nueva carpeta) y escribe el contenido en la nueva carpeta. Si el archivo .zip contiene una geodatabase de archivos, adjunte .gdb al nombre de salida.
Etiqueta |
Tipo de datos |
Tipo |
Dirección |
---|---|---|---|
Archivo ZIP de entrada |
Archivo |
Requerido |
Entrada |
Ubicación de salida |
Espacio de trabajo |
Requerido |
Entrada |
Nombre de salida |
Cadena de caracteres |
Requerido |
Entrada |
Ruta de salida |
Espacio de trabajo |
Derivado |
Salida |
Para ver un ejemplo de cómo utilizar estas utilidades ZIP, consulte un ejemplo de Servicio GP: Recortar y enviar y ejemplo de Servicio GP: Datos según demanda.