7 votos

¿Utilizar la biblioteca arcpy Python con capas de servicios de características alojadas de ArcGIS Online?

¿Es posible utilizar la biblioteca arcpy con capas de servicios de características alojadas de ArcGIS Online?

Conozco la API de ArcGIS para Python, pero la API carece de muchas de las características de arcpy.

En mi caso, me gustaría hacer un script para rellenar un nuevo campo de una capa de puntos con los atributos XY de la capa (latitud y longitud). Esto se conoce como "Calcular geometría" en ArcMap y "Añadir atributos de geometría" en ArcGIS Pro.

Necesito que esto se haga con un script, en lugar de hacerlo manualmente, porque estoy trabajando con una capa que frecuentemente tiene puntos adicionales añadidos a través de Survey123. Survey123 no registra automáticamente la longitud y latitud de los puntos añadidos a través de su formulario, y de nuevo, la API de ArcGIS para Python no cubre 'Calcular geometría', que yo sepa. Por último, preferiría no descargar la capa de ArcGIS Online, ejecutar scripts arcpy en ella localmente, y luego volver a publicar la capa, ya que esto tiende a restablecer la simbología, los nombres de los campos, etc. - pero si alguien que sabe más sobre ArcGIS Online puede ayudar con esta estrategia, que podría resolver el problema también.

El código de arcpy sería algo tan simple como

import arcpy
arcpy.env.workspace = <some file gdb>
arcpy.AddGeometryAttributes_management(<name of the layer as a string>, "POINT_X_Y_Z_M")

Pero en mi caso, en lugar de una clase de característica en un archivo de geodatabase almacenado localmente, todo lo que tengo es un servicio de característica alojado. He intentado utilizar la url del punto final REST como espacio de trabajo, pero no parece funcionar. También he tratado de extraer la capa de características en sí a través de la API de ArcGIS para Python, a continuación, utilizando que en el código arcpy:

search_result = gis.content.search(query="<my layer name>", max_items=1, item_type="Feature Service")
# or search_result = gis.content.get(<item ID of my layer>)
item = search_result[0]
item_layers = item.layers
layer_fset = item_layers[0].query()
layer_features = layer_fset.features
layer_flayer = item_layers[0]

Pero eso tampoco parece funcionar. O me estoy perdiendo algo o quizás no es posible.

3voto

Chip Puntos 127

Utilizando ArcGIS Pro 2.5 y asegurándome de que mi servicio de características era editable con privilegios de actualización pude conseguir que la siguiente línea de código funcionara: arcpy.management.AddGeometryAttributes("https://services.arcgis.com/<myCode>/arcgis/rest/services/<MyLayer>/FeatureServer/0", "POINT_X_Y_Z_M", None, None, None)

1voto

Galbrezu Puntos 142

La biblioteca arcpy fue diseñada y construida mucho antes de que las capas de características fueran una cosa. Bueno, técnicamente arcgisscripting fue construido primero, y arcpy es una envoltura de arcgisscripting, pero eso no viene al caso. El punto es que arcpy es una envoltura de herramientas, y todo * Las herramientas se crearon en su momento para trabajar con conjuntos de datos locales (fgdb, shape, etc.) y capas de bases de datos geográficas de la empresa, no para trabajar con capas de características alojadas.

Ahora pongo el ** al lado del todo comentario porque desde ArcGIS Pro, algunos aceptarán la entrada de una capa de características y la modificarán. Add Field, Delete Field, Calc, y Append son todas las herramientas que estoy seguro que puedes usar con los servicios de características alojados. Ahora bien, esto es específico del herramientas dentro de ArcGIS Pro . Usted debe poder utilizar arcpy (es decir, el envoltorio de la herramienta) para trabajar con las capas de características.

Teniendo en cuenta todos estos puntos, hasta donde yo sé, el Añadir atributos de geometría en ArcGIS Pro hace no trabajar contra las capas de características. Así que para responder a su pregunta:

  • A lote de herramientas puede leer capas de características como entrada (piense en el búfer, la copia, etc.)
  • Un conjunto muy reducido de herramientas puede actuar sobre las capas de características o actualizarlas (añadir campo, calcar campo)
  • En su caso particular, preguntando por Añadir Atributos de Geometría, tendrá que hacer llamadas REST HTTP puras, o hacer uso de la API de ArcGIS Python.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X