Introducción
ArcGIS Online yArcGIS Enterprise Portal Para aprovechar ampliamente los elementos registrados en , es necesario ingresar información detallada como el título del elemento, resumen, descripción, etiquetas y términos de uso.
Dicho esto, abrir cada elemento uno por uno para ingresar o actualizar su información detallada es una tarea bastante ardua.
En el portal de Esri USAGEO Jobe de la empresaAdmin Tools es posible realizar actualizaciones masivas desde CSV, pero esta vez presentamos un método para actualizar masivamente los detalles de elementos combinando Excel × Python (ArcGIS API for Python). No se requiere explicación; para quienes deseen verificar el código de ejemplo en Excel y Python, como siempre,está disponible en GitHub así que por favor consúltelo.
※ Este método se implementó cuando se actualizó y publicó un archivo de geodatabase (FGDB) con detalles de elementos en el archivo titulado "Sitio de uso recopilando ejemplos de uso en ArcGIS para modelos 3D urbanos". Este sitio de uso está construido conArcGIS Hub Basic, por lo que dentro del código se especifica un grupo particular y el ID del grupo del sitio creado previamente en ArcGIS Hub."Ministerio de Tierra, Infraestructura, Transporte y Turismo Proyecto PLATEAU Modelo 3D Urbano" contenido del grupo Se puede verificar el group id en ArcGIS Online como se muestra a continuación, pero el id puede ser cualquier objeto al que pertenezca el usuario además del grupo creado en ArcGIS Hub.
Además, para la creación y puesta en marcha del sitio en ArcGIS Hub, consulte la "Guía rápida de inicio de ArcGIS Hub Basic" o la "A quick start guide to ArcGIS Hub Basic".
Figura - Ejemplo de group id (grupo "Ministerio de Tierra, Infraestructura, Transporte y Turismo Proyecto PLATEAU Modelo 3D Urbano")
1 Procedimiento para actualizar masivamente los detalles del elemento
1.1 Propiedades del elemento
Primero, confirmamos la API para actualizar detalles del elemento con ArcGIS API for Python. Según la referencia API, la actualización de detalles del elemento es posible mediante el método update() de la clase arcgis.gis.Item.
update(item_properties=None, data=None, thumbnail=None, metadata=None)
Este método permite especificar una lista de claves diccionario posibles en item_properties. En la ayuda están documentadas las claves type, typeKeywords, description, title, url, tags, text, snippet, extent, spatialReference, accessInformation, licenseInfo, culture, access y commentsEnabled.
En este ejemplo actualizamos title, snippet, description, tags, licenseInfo y accessInformation. Para facilitar la comprensión visual relacionamos las claves especificadas en item_properties con su representación real como sigue:
- id : id del elemento
- title : título
- snippet : resumen
- description : descripción (se puede usar HTML)
- tags : etiquetas (en caso de múltiples etiquetas separadas por comas)
- licenseInfo : términos de uso
- accessInformation : derechos de autor
1.2 Organizar información detallada del elemento en Excel
Ya que entendemos qué información organizar sobre los detalles del elemento, ingresamos las claves item_properties en la primera fila de Sheet1 (en el archivo Excel de ejemplo llamado "Sheet1 para actualización") y luego ingresamos las propiedades del elemento fila por fila a partir de la segunda fila (para usar las claves cuando convertimos a diccionario con .to_dict() dentro del código es necesario que los nombres de columna coincidan estrictamente con las claves item_properties).
Además, para uniformar descripciones más legibles que HTML en la columna description usamos una macro VBA para actualizarla. Debido a posibles problemas de seguridad al publicar el archivo Excel con macros adjuntas esta vez colocamos el código macro como referencia bajo el nombre "UpdateDescription_SampleVBA.txt", por favor consúltelo si es necesario.
Figura - Ejemplo organizado en Excel (ejemplo de entrada en archivo Excel usado en ambiente de prueba)
1.3 Explicación del código para actualizar masivamente detalles del elemento
Después de organizarlo en Excel solo ejecutamos un pequeño ajuste al código anotado a continuación según nuestro entorno local. Específicamente debemos modificar las partes dentro del notebook donde se anotan "your_xyz", "new_owner_name" y "share_group_id" para que coincidan con nuestro entorno local.
Aunque hay comentarios dentro del notebook explicando el proceso paso a paso también proporcionamos una explicación adicional aquí.
(1) Leer datos Excel a DataFrame con Pandas
Primero leemos Excel a DataFrame con Pandas.
import pandas as pd
excel_file = r"your_folder_path\Modelo 3D Urbano_AGOL_detalles_elemento_desarrollo_prueba.xlsx"
df = pd.read_excel(excel_file)
※ Debido a que desde xlrd versión 2.0.0 solo soporta formato "xls", dependiendo del entorno al leer archivos "xlsx" con pd.read_excel es necesario especificar openpyxl como engine. En entornos donde se usa ArcGIS Pro con xlrd versión 1.2.0 no es necesario especificar engine (para creación ambiente con ArcGIS Pro consulte [ArcGIS Developer Resources] - [Actualizar paquete arcgis] - [Entorno ArcGIS Pro 2.3 o superior]).
import pandas as pd
excel_file = r"your_folder_path\Modelo 3D Urbano_AGOL_detalles_elemento_desarrollo_prueba.xlsx"
df = pd.read_excel(excel_file,engine='openpyxl')
(2) Conectar al sitio organizacional ArcGIS Online para actualizar información del elemento y compartirlo con grupo específico
A continuación conectamos al sitio organizacional ArcGIS Online y obtenemos cada elemento basado en 'id' desde Excel fila por fila; luego actualizamos 'title', 'snippet', 'description', 'tags', 'licenseInfo' y 'accessInformation' usando item.update(). Además configuramos protección contra eliminación con my_item.protect(enable=True) y compartimos el elemento con organización y grupo específico usando share().
Como se explicó arriba las claves posibles para item_properties y su correspondencia textual están descritas en 1.1 Propiedades del elemento.
from arcgis.gis import GIS
gis = GIS("https://www.arcgis.com/", "your_username", "your_password")
for index, row in df.iterrows():
item_id = row[0] # obtener id
item_properties = row[1:7].to_dict() # obtener diccionario desde columnas title hasta accessInformation
my_item = gis.content.get(item_id) # obtener elemento
my_item.update(item_properties) # actualizar información title hasta accessInformation con item.update()
my_item.protect(enable = True) # activar protección contra eliminación para el elemento
my_item.share(org= True, groups=['share_group_id']) # compartir con organización y grupo específico - ambiente prueba; "Open Data Compartir Contenido"(id:f862b4f5d32f435596795947df012042), ambiente principal; "Ministerio Tierra Infraestructura Transporte Modelo 3D Urbano Proyecto PLATEAU Compartir Contenido"(id:d568e2190c4f456f8bd812c8e07c719a)
2 Explicación punto por punto sobre cómo publicar catálogo en ArcGIS Hub
※ Originalmente los procedimientos anteriores para "actualizar masivamente información del elemento" y los siguientes pueden variar según quien opere o acceso profesional; por ello puede ser recomendable dividirlos en notebooks separados. Esta vez los anotamos juntos en un mismo notebook conveniente así que agradecemos su comprensión.
Si divide el notebook ejemplo debe ejecutar antes los procesos explicados en (1) Leer datos Excel a DataFrame con Pandas; abajo está el código correspondiente.
import pandas as pd
excel_file = r"your_folder_path\Modelo 3D Urbano_AGOL_detalles_elemento_desarrollo_prueba.xlsx"
df = pd.read_excel(excel_file)
2.1 Explicación código para publicar catálogo en ArcGIS Hub
(3) Como administrador conectarse al sitio organizacional ArcGIS Online para cambiar propietario del elemento y compartirlo con grupo específico además de hacerlo público
Finalmente cambiamos propietario inicialmente con reassign_to() (aunque no siempre obligatorio cambiar propietario; aquí cambiamos cuenta pública corporativa desde personal), luego configuramos compartir nuevo propietario con organización y grupo específico usando share(), además hacemos público el contenido.
gisadmin = GIS("https://www.arcgis.com/", "your_admin_username", "your_admin_password") # administrador
for index, row in df.iterrows():
item_id = row[0] # obtener id
my_item = gisadmin.content.get(item_id)
# cambiar propietario inicialmente
my_item.reassign_to("new_owner_name") # ambiente prueba; "kataya@dev3admin", ambiente principal: "Esri_Japan"
Para reflejar el contenido publicado en ArcGIS Hub, después de cambiar el propietario, vuelva a compartir con grupos específicos de la organización
my_item.share(everyone = True, org= True, groups=['your_share_group_id']) # Compartir con la organización y grupos específicos - entorno de prueba; "Contenido compartido de Open Data" (id:f862b4f5d32f435596795947df012042), entorno principal; "Contenido de uso del Ministerio de Tierra, Infraestructura, Transporte y Turismo 3D City Model 'Project PLATEAU'" (id:d568e2190c4f456f8bd812c8e07c719a)
Imagen después de la actualización
Al ejecutar el script y finalizar, al verlo desde el lado de ArcGIS Online como un elemento independiente, se verá como sigue.
Ejemplo después de actualizar un elemento independiente (detalles del elemento en ArcGIS Online: entorno para pruebas de desarrollo "Base de datos de archivos del modelo 3D de la ciudad (Project PLATEAU) de Utsunomiya")
Además, en el catálogo de ArcGIS Hub, se ve como sigue.
Ejemplo después de actualizar un elemento independiente (detalles del elemento en el catálogo del entorno para pruebas de desarrollo de ArcGIS Hub)
Aquí, si se enfoca en el "Base de datos de archivos del modelo 3D de la ciudad Utsunomiya (Project PLATEAU)" en el centro de la pantalla del catálogo, se muestra la correspondencia con los 107 caracteres del texto explicativo (columna description en Excel) del detalle del elemento en ArcGIS Online mencionado arriba. En otras palabras, cuando se publica datos en ArcGIS Hub también visibles, es una técnica para priorizar y registrar la información necesaria al principio del texto explicativo del detalle del elemento para ahorrar tiempo en la entrada doble.
Resumen
Con la combinación Excel × Python (ArcGIS API for Python) presentada en este artículo, no solo actualiza toda la información del elemento en ArcGIS Online, sino que también ahorra tiempo en el registro desde el lado de ArcGIS Hub y finalmente105 elementos pudieron ser publicados (referencia:Catálogo "Base de datos de archivos del modelo 3D de la ciudad").
- Archivo notebook, - Muestra Excel, - Tres archivos VBA macro para actualizar la columna description se publican habitualmenteen GitHub, por favor utilícelos.
Además, como punto para usar elementos dentro de una organización, también hay un artículo anterior que presenta "Introducción a puntos para gestión de elementos (Parte anterior)Parte anterior,Parte posterior)", por favor consúltelo también.
Referencias
-GEO Jobe Inc.Admin Tools
-Sitio web con ejemplos prácticos del uso del modelo 3D City en ArcGIS
[ArcGIS Hub]
-Resumen de ArcGIS Hub Basic-
Guía rápida para comenzar con ArcGIS Hub Basic-
Una guía rápida para comenzar con ArcGIS Hub Basic
[Artículo del blog]
-
Introducción a puntos para gestión de elementos - Parte anterior -: Aprovechemos las etiquetas eficazmente-
Introducción a puntos para gestión de elementos - Parte posterior -: Aprovechemos las categorías eficazmente
Script para actualizar desde CSV a REST API con Pure Python
Guía del ArcGIS API for Python
Referencia API del ArcGIS API for Python (clase arcgis.gis.Item)
Actualización de información del elemento: update(item_properties=None, data=None, thumbnail=None, metadata=None)
Compartir elemento: share(everyone=False, org=False, groups=None, allow_members_to_edit=False)
Cambio de propietario: reassign_to(target_owner, target_folder=None)