¿Usa arcpy.SetParameter () con Python Script Tool publicada como Servicio de geoprocesamiento?

8

Tengo un script que debe publicarse en ArcGIS Server como un servicio de geoprocesamiento. Este script calcula un conjunto de registros en forma de tabla. Necesito establecer un parámetro de salida para que devuelva la tabla (conjunto de registros).

Entonces, para asegurarme de que tengo una tabla (no una clase de entidad), estoy usando arcpy.TableToTable_conversion (), enviando la tabla al espacio de trabajo in_memory. Entonces, sé que tengo una mesa. Sé que tiene registros, ya que puedo realizar un arcpy.GetCount y obtener el número de registros.

Tengo el parámetro de salida definido. Así es como se ve:

arcpy.SetParameter(2, theTable)

No importa lo que intente, esto no funciona. En mi caja de herramientas, el parámetro de salida se establece como RecordSet. He intentado proporcionar un objeto de conjunto de registros, la ruta a la clase de entidad en memoria y muchas otras ideas.

¿Cómo maneja correctamente la salida de una tabla a un conjunto de registros con SetParameter para el servidor ArcGIS?

Kenton W
fuente
Suena como (de ESRI) que no puedo usar el espacio de trabajo en memoria para generar conjuntos de registros. Cuando el servicio va a recuperar los elementos establecidos en la instrucción SetParameter, la tabla en memoria se ha eliminado.
Kenton W
1
No estoy seguro de quién te dijo eso, pero eso no es cierto. Puede usar la salida in_memory. El único momento real en el que no puede usar la salida in_memory es cuando desea dibujar el resultado con un servidor de mapas de resultados
KHibma el

Respuestas:

5

En mi experiencia (y estoy más que feliz de ser corregido en esto) cuando construyes un servicio de geoprocesamiento, el argumento que das para la salida no es el objeto en sí, sino una referencia al objeto (la ruta del archivo).

El tipo de datos solo le dice al servidor cómo interpretar los datos dependiendo de cómo ejecute la herramienta (dentro de una aplicación puede mostrar automáticamente el conjunto de registros, desde SOAP puede obtener el conjunto de registros como una secuencia de datos (aunque no estoy seguro) ) y a través de REST solo obtendrás un enlace).

Básicamente, debe escribir su tabla en este archivo: el servidor ArcGIS antepondrá automáticamente una ruta de carpeta / jobid al frente según su carpeta de salida desde que agregó el modelo al servidor. p.ej

  1. Su carpeta de salida en el servidor podría ser C:/arcgisserver/arcgisoutput
  2. Entonces en el servidor esta carpeta se convierte /arcgisoutput
  3. Entonces su salida para su caja de herramientas podría ser /arcgisoutput/tabletoolbox
  4. Su valor para la salida podría ser %scratchworkspace%/tablename.csv

Tenga en cuenta que %scratchworkspace%permite que el servidor ArcGIS suba en los directorios de salida. Consulte Conceptos clave para servicios de geoprocesamiento en la ayuda de ESRI.

Entonces, el servidor crea automáticamente una identificación de trabajo (UUID), crea una carpeta para usted en la salida y antepone esto a su argumento de salida. Escriba sus datos allí y cuando los recupere del servidor arcgis obtendrá un enlace href como: http://server_name/arcgisoutput/tabletoolbox/job_id/tablename.csv

Ahora debería poder acceder al archivo como quiera (usar urllib2.urlopen(path).read()en Python como un acceso directo rápido).

Espero que todo esto esté claro! -H

om_henners
fuente
0

Supongo que el parámetro del conjunto de registros se ha establecido en derivado en el script de parámetros.

También supongo que puede publicar la herramienta directamente con una caja de herramientas o mediante un proyecto mxd. En mi experiencia, he tenido más éxito con las herramientas publicadas en proyectos mxd.

A veces he resuelto problemas de servicios de geoprocesamiento mediante la publicación de un modelo ModelBuilder que era solo una envoltura alrededor del script de Python, es decir, dentro del modelo solo tenía el script y expuse los parámetros del script fuera del modelo.

Roberto Messora
fuente
Estoy usando una caja de herramientas personalizada para publicar el script como servicio. Cuando establece un parámetro en Salida, se cambia automáticamente a Derivado.
Kenton W