4 votos

Configuración programática de 'Store Relative Pathways' para múltiples MXDs ArcGIS 10.1

Estoy buscando mover un gran número de mxds a una ubicación diferente en la misma unidad. Muchos mxds no tienen marcada la opción 'Store relative pathways', por lo que esta operación provocará enlaces rotos a los datos. Acabo de empezar a utilizar ArcGIS 10.1 y ahora es posible actualizar mediante programación las rutas relativas de todos los mxds utilizando arcPy y estableciendo relativePaths como "True". Tuve un intento de escribir Python script que (en teoría) bucea a través de una carpeta superior y busca todos los mxds y luego actualiza el ajuste "Store relative pathways" para que esté activado. Cuando ejecuto este script en PyScripter, no consigue completarse, me sale el siguiente error: "exceptions.NameError: el nombre 'mxd' no está definido

¿Alguien puede ayudar? Gracias de antemano, Magda

    import arcpy, os

folderPath = r"C:\My Folder Path\...\...\..."

for filename in os.listdir(folderPath):
    fullpath = os.path.join(folderPath, filename)
    if os.path.isfile(fullpath):
        basename, extension = os.path.splitext(fullpath)
        if extension.lower() == ".mxd":
            mxd = arcpy.mapping.MapDocument(fullpath)
            mxd.relativePaths = 'True'
        mxd.save()
del mxd

2voto

sker Puntos 2670

Tu código es bueno. Lo ejecuté en algunos datos de ejemplo que creé rápidamente y el único problema que tuve fue que necesitas escapar las barras invertidas en tu ruta de archivo en la segunda línea:

folderPath = "C:\\My Folder Path\\...\\...\\...\\"

Esto debería permitir a Python obtener las rutas de sus archivos mxd y luego cambiar la configuración. La otra cosa a tener en cuenta es que tener espacios en las rutas de los archivos puede causar problemas, así que evítalos si es posible.

Espero que esto ayude.

1voto

idursun Puntos 3648

el error exceptions.NameError: name 'mxd' is not defined significa que una de las sentencias if está impidiendo que el código llegue a la línea.

  mxd = arcpy.mapping.MapDocument(fullpath)

la solución es determinar cuál está fallando. El del mxd está fallando porque a mxd nunca se le asignó un valor porque cada vez que pasaba por el bucle la sentencia If nunca era verdadera.

En algunos casos tiene sentido poner la variable a None antes del bucle, para evitar que el programa obtenga un error en el comando del. Pero en tu caso quieres investigar por qué las sentencias if no son correctas.

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