PYTHON GIS - Como Re enrutar masivamente archivos de ArcGIS si ha cambiado el nombre del shapefile / feature class (ArcMap / MXD)

0

 

Aprende como usar Python (ArcPy) para cambiar la fuente de datos no encontradas dentro de un archivo MXD utilizando Python.


En este articulo aprenderás como reestablecer los datos no encontrados dentro de un archivo MXD por el renombramiento del feature class o shapefile utilizando Python.


A diferencia de mi articulo anterior "PYTHON GIS - Cómo reparar rutas de varios archivos MXD masivamente", en este artículo la ruta donde se almacenan los datos espaciales no ha cambiado, si no que ha cambiado el nombre del dato en si mismo, ya sea porque cambio la concepción del modelo de datos o porque se usó una capa distinta a la que originalmente debe usarse por norma entre otras razones de cambio de nombre.


Para recuperar el enlace de la información espacial renombrada con la capa almacenada en un archivo MXD el procedimiento normal es el siguiente:


¿Cómo asignar un objeto espacial a una capa?


Opción 1:


1) Abrir el archivo MXD.


2) Ir a la capa con el enlace roto (a), dar clic derecho y presionar el ítem "Properties..." (b).



3) Ir a la pestaña "Source" (c) y presionar "Set Data Source..." (d).


4) Buscar el objeto espacial (Shapefile/Feature Class) con el nuevo nombre que corresponde a la capa (e) y presionar el botón "Add" (f).


5) Dar clic en aceptar en la ventana "Layer Properties" (g).



Descripción gráfica del procedimiento para establecer la fuente de datos para capas según la opción número 1



6) Guardar archivo MXD.


Opción 2:


1) Abrir el archivo MXD.


2) Ir a la capa con el enlace roto (a), dar doble clic (izquierdo) sobre el nombre de la capa (b), lo que desplegara automáticamente la ventana "Layer Properties"


3) Ir a la pestaña "Source" (c) y presionar "Set Data Source..." (d).


4) Buscar el objeto espacial (Shapefile/Feature Class) con el nuevo nombre que corresponde a la capa (e) y presionar el botón "Add" (f).


5) Dar clic en aceptar en la ventana "Layer Properties" (g).



Descripción gráfica del procedimiento para establecer la fuente de datos para capas según la opción número 2



6) Guardar archivo MXD.


Opción 3:


1) Abrir el archivo MXD.


2) Ir a la capa con el enlace roto, dar clic o doble clic (izquierdo) sobre el checkbox de la capa (a), lo que desplegara automáticamente la ventana "Set Data Source" (b)


3) Buscar el objeto espacial (Shapefile/Feature Class) con el nuevo nombre que corresponde a la capa (c).


4) Dar clic en "Add" (d).


Descripción gráfica del procedimiento para establecer la fuente de datos para capas según la opción número 3



5) Guardar archivo MXD.


Este procedimiento sin importar cual opción se elija, ha de repetirse con cada capa dentro de los archivos MXD que han perdido su fuente de datos, lo cual puede ser bastante demorado, si el problema se da con varios MXD, por esto te enseñare como puede ser mucho más eficiente utilizando código Python (No te preocupes no necesitaras saber programar para lograrlo) 



¿Cómo reparar fuentes de datos de Archivos MXD (ArcMap) automáticamente?


Paso 1: abrir un archivo de ArcGIS en blanco.


Paso 2: Abrir la ventana Python en la barra de herramientas Standard.


Muestra la ubicación de la ventana Python dentro de la barra de herramientas Standard (estándar)


Paso 3: Respaldar los archivos MXD originales.


Paso 4: Identificar las rutas perdidas y las rutas actuales de la información. Para verificar las rutas perdidas, da clic derecho sobre la capa (a), presiona el boton "Properties..." (b) y ve a la pestaña "Source" (c), en el item "Location:" (d) encontraras la ruta donde se almacenaban anteriormente los datos espaciales y el nombre anterior (e).


Muestra donde encontrar la ruta de una capa que perdió el enlace a su fuente de datos para un archivo de ArcGIS / ArcMap


Paso 5: Copiar en un blog de notas el siguiente código y reemplazar el texto C:\EJEMPLO\EJEMPLO en la línea #02 por la ruta de la carpeta donde tienes almacenados los archivos MXD que presentan el problema. 




import arcpy, os                                                                                          #01
arcpy.env.workspace = ws = r"C:\EJEMPLO\EJEMPLO"                                                          #02
mxd_list = arcpy.ListFiles("*.mxd")                                                                       #03
for mxd in mxd_list:                                                                                      #04  
    mxd = arcpy.mapping.MapDocument(os.path.join(ws, mxd))                                                #05
    lyra = arcpy.mapping.ListLayers(mxd)                                                                  #06
    for lyr in lyra:                                                                                      #07
        if lyr.supports("DATASOURCE"):                                                                    #08
           if lyr.dataSource == r"C:\EJEMPLO\EJEMPLO.gdb\Old_feature_class":                              #09
               lyr.replaceDataSource(r"C:\EJEMPLO\EJEMPLO.gdb", "FILEGDB_WORKSPACE", "New_feature_class") #10
    mxd.save()                                                                                            #11
del mxd_list                                                                                              #12
                                                                     


Paso 6: En la línea #09 del código remplazar C:\EJEMPLO\EJEMPLO.gdb\Old_feature_class con la ruta anterior y/o perdida incluyendo el nombre del shapefile o el feature class según lo identificado en el paso 4.


Paso 7: En la línea #10 del código remplazar C:\EJEMPLO\EJEMPLO.gdb con la ruta nueva en donde se almacena la información espacial. En la misma línea #10 reemplaza New_feature_class por el nombre del shapefile o el feature class.


Paso 8 (Opcional): Para definir si el objeto a cambiar se encuentra en una base de datos .mdb debe remplazarse en la línea #10 FILEGDB_WORKSPACE por ACCESS_WORKSPACE, o si el objeto es un shapefile debe cambiarse FILEGDB_WORKSPACE por SHAPEFILE_WORKSPACE


Paso 9: Copiar el código modificado en la ventana Python y presionar la tecla Enter o Intro dos veces.


Al cabo de unos segundos veras como comienza a actualizarse la fecha de modificación de los archivos de ArcMap, y al abrirlo notaras la recuperación del enlace en las capas que presentaban este problema.


Notas:


  • Puede que la simbología haya quedado afectada ya que los campos utilizados para la representación gráfica pueden no coincidir con los originales, por lo cual te invito a leer mi articulo "PYTHON GIS - Modificar simbología de una capa en varios archivos de ArcGIS" en donde podrás obtener una idea de como solucionar esto ágilmente.
  • En caso de que también debas cambiar la Definition Query de la capa te invito a leer mi articulo "PYTHON GIS - Como modificar y/o crear una Definition Query a una capa dentro de varios archivos de ArcGIS (ArcMap / MXD)".


Espero hayas disfrutado este artículo, próximamente subiré un video explicativo del procedimiento que podrás consultar en este blog. Guarda mi blog entre tus enlaces favoritos, estaré subiendo muchos más trucos de este estilo, recuerda que puedes hacer llegarme tus inquietudes en la página de contacto o deja tu comentario, estaré atento a responder.


Entradas que pueden interesarte

Sin comentarios