ERROR
Es posible sobrescribir una capa de entidades alojada existente en un portal utilizando el método de overwrite() en ArcGIS API for Python, como se muestra en el siguiente ejemplo:
from arcgis.gis import GIS from IPython.display import display gis = GIS("https://python.playground.esri.com/portal", "username", "password", verify_cert=False) item = gis.content.search("feature_name", "Feature Layer") service_flayer_collection = FeatureLayerCollection.fromitem(item) service_flayer_collection.manager.overwrite(r'[folder_location]/TEST.zip')
Sin embargo, en algunos casos, aparece el siguiente error:
Error: Error de tiempo de ejecución: el elemento <item name> ya existe.
El error puede ocurrir si la capa publicada está asociada a una capa de vista. Consulte Portal for ArcGIS: Crear vistas de capas de entidades alojadas para obtener más información. Al buscar el nombre de la capa de entidades con la función gis.content.search(), se devuelve más de un resultado: la capa de entidades y la capa de vista. Para comprobar si hay capas de vista asociadas, se puede llamar al parámetro establecido para la función gis.content.search() en el script, como se muestra en el siguiente ejemplo:
item = gis.content.search("featurename", "Feature Layer") item
El código devuelve todos los elementos disponibles con el nombre especificado. El siguiente script muestra un ejemplo del resultado:
[<Item title:"featurename_1" type:Feature Layer Collection owner:User_1>, <Item title:"featurename" type:Feature Layer Collection owner:User_1>]
Para evitar el problema de la función gis.content.search() se puede agregar un índice o matriz a la función. Como las capas de vista se enumeran primero en el resultado de búsqueda, se debe insertar un índice de '1' para que la búsqueda seleccione la capa de entidades alojada correcta que se va a sobrescribir. La siguiente muestra de código muestra cómo hacerlo:
from arcgis.gis import GIS from IPython.display import display gis = GIS("https://python.playground.esri.com/portal", "username", "password", verify_cert=False) #For using index array method item = gis.content.search("feature_name", "Feature Layer")[1] //Setting the index for the search function service_flayer_collection = FeatureLayerCollection.fromitem(item) service_flayer_collection.manager.overwrite(r'[folder_location]/TEST.zip')
Otra alternativa es utilizar el método gis.content.search() buscando el Id. de elemento de la entidad deseada. El Id. de elemento de una entidad se puede encontrar en la barra de direcciones de un navegador cuando la entidad se abre en ArcGIS Online, como se muestra en la siguiente imagen:
Para ello, modifique el script de la siguiente manera:
#Para buscar utilizando el Id. de elemento item = gis.content.search("item_id")
Obtener ayuda de expertos en ArcGIS
Descargar la aplicación de soporte de Esri