¿Cómo se pueden cambiar las rutas de datos de origen para cada archivo de capa en la carpeta X usando arcpy?
He seguido Actualizando y arreglando las fuentes de datos con arcpy.mapping lo mejor que puedo, sin embargo, todo lo que obtengo es un poco útil Runtime error <type 'exceptions.ValueError'>: Layer: Unexpected error
que no me dice lo suficiente como para solucionar lo que está mal o falta.
Aquí está el código (simplificado para probar un archivo de una sola capa):
import arcpy, os
fname = r'K:\Layers\xxx.lyr'
lyr = arcpy.mapping.Layer(fname)
oldpath = lyr.workspacePath
print 'oldpath: ', oldpath
lyr.findAndReplaceWorkspacePath(oldpath, r'C:\some\other.gdb')
print 'newpath: ', lyr.workspacePath
y los resultados:
oldpath: K:\Canvec_Utility\Temp.gdb
Traceback (most recent call last):
File "x10x.py", line 12, in <module>
lyr.findAndReplaceWorkspacePath(oldpath, r'C:\some\other.gdb')
File "C:\ESRI\ArcGIS\Desktop10.0\arcpy\arcpy\utils.py", line 181, in fn_
return fn(*args, **kw)
File "C:\ESRI\ArcGIS\Desktop10.0\arcpy\arcpy\_mapping.py", line 601, in findAndReplaceWorkspacePath
return convertArcObjectToPythonObject(self._arc_object.findAndReplaceWorkspacePath(*gp_fixargs((find_workspace_path, replace_workspace_path, validate), True
)))
ValueError: Layer: Unexpected error
((movió la sección 'actualizar' a una respuesta))
arcpy
arcgis-10.0
layers
wilkie mate
fuente
fuente
Runtime error...
citado arriba es del shell interactivo de python en Arccatalog, que no proporciona un rastreo. Los resultados con el rastreo se copian desde un shell de comandos.Respuestas:
Parece que el método correcto para usar al cambiar espacios de trabajo Y conjuntos de datos de características es lyr.replaceDataSource () . Aquí está mi script de trabajo:
En las pruebas, parece que validar en este método es diferente nuevamente: verifica que el nuevo espacio de trabajo sea válido, pero ignora la clase de entidad y los conjuntos de datos de entidad, lo que significa que no devolverá un error si el FC objetivo no está allí.
Por otro lado, si el FC objetivo está presente, incluso dentro de un conjunto de datos de características diferente, la nueva ruta de origen de datos se adapta en consecuencia independientemente de si la validación es verdadera o falsa.
Actualización: ahora en Github para permitir compartir y revisar más fácilmente.
fuente
Lo inútil
unexpected error
en este caso significa algo así como "no existe una nueva ruta" . Elvalidate
parámetro opcional predeterminado es True si no se especifica. Con falso, la secuencia de comandos se completa sin error, pero los archivos de capa resultantes aún se rompieron a pesar de que la ruta de destino y la clase de entidad existen.resultado
Además de no conocer inicialmente la validación predeterminada a verdadero, un error, o al menos un comportamiento muy peculiar hizo que la solución de problemas sea difícil. Actualizar y corregir fuentes de datos con arcpy.mapping dice No incluir los nombres de datasets de entidades en la ruta del espacio de trabajo. Los conjuntos de datos de entidades son parte del espacio de trabajo. Si una clase de entidad, por ejemplo, pasa de ser una clase de entidad independiente a un conjunto de datos de entidad, un documento de mapa aún se abrirá sin que se rompa la capa " , y " Si una capa o tabla dentro de un documento de mapa o archivo de capa se mueve dentro o fuera de un conjunto de datos de características, sus enlaces no deben romperse ".
Resulta que validar tiene un ángulo ligeramente diferente en esto. Sí, no importa en qué parte de la nueva geodatabase (espacio de trabajo) resida la clase de entidad de destino , en el nivel superior o en un conjunto de datos de entidad completamente diferente. Sin embargo, el espacio de trabajo de destino debe contener un conjunto de datos de características con el mismo nombre o la validación falla .
Fuentes :
fuente