9 votos

¿Cómo puedo rastrear el árbol de directorios y cambiar Mxd relativePaths a true?

Tengo un gran número de carpetas de proyectos donde cada carpeta de proyecto puede tener muchas subcarpetas. Estas subcarpetas pueden contener mxds, shapefiles, gdb's personales y fgdb's. En muchos casos, el usuario se olvida de marcar la opción "Use Relative Paths" antes de guardar los mxds, por lo que cuando se copia la carpeta, los enlaces de las fuentes de datos se rompen.

Me gustaría escribir un arcpy independiente script que rastree los directorios, abra cada mxd, establezca los relativePaths en true, y luego guarde el mxd. ¿Existe un script que haga esto en alguna parte?

La propiedad relativePaths del Objeto MapDocument es de sólo lectura. ¿Hay alguna otra manera de cambiar esto?

0 votos

No estoy seguro de que esto sea posible o no utilizando ese flujo de trabajo. Pero lo que sí creo que podría funcionar es abrir automáticamente cada .mxd, copiar todas las fuentes de datos y la información de ese .mxd original en un nuevo .mxd en blanco que tenga marcadas las rutas relativas, y luego volver a guardar el nuevo. Sólo una idea como solución si tu primera forma no es posible.

0 votos

No creo que sea posible. Sin embargo, podrías obtener una lista de todos los documentos que utilizan rutas absolutas y sus autores y enviarles un correo electrónico de forma severa.

6voto

Marc Puntos 230

Esto es posible utilizando el siguiente python script (con agradecimiento a Neil Clemmons en el Foro ESRI ). Necesitará el comtypes biblioteca y la Recortes módulo de Pierssen Consulting.

from Snippets import GetLibPath, InitStandalone
from comtypes.client import GetModule, CreateObject
import os

m = GetModule(GetLibPath() + 'esriCarto.olb')
InitStandalone()
file_dir = r'C:\dir'
for filename in os.listdir(file_dir):
   fullpath = os.path.join(file_dir, filename)
   p = CreateObject(m.MapDocument, interface=m.MapDocument)
   p.Open(fullpath)
   newpath = os.path.join(file_dir,'Changed_' + filename)
   p.SaveAs(newpath,True,False)
   del p

0 votos

Consulte también el hilo canónico local para utilizar el módulo Snippets de Pierssen en ¿Cómo se accede a ArcObjects desde Python?

2voto

auramo Puntos 161

No es posible en 10.0 pero he tenido algo de éxito Uso de ArcObjects en Python para tareas relativamente sencillas como ésta en las que escribir una aplicación .NET sería excesivo, pero la funcionalidad necesaria no estaba expuesta en los módulos arcpy/arcgisscripting. Utilice os.walk para la parte de rastreo del árbol de directorios.

Para el bit de ArcObjects, utilice IMapDocument.Open() para abrir el MXD (sin tener que tenerlo abierto en ArcMap), eche a IMxDocument y establecer RelativePaths a true, y utilizar IMapDocument.Save() para salvarlo.

0 votos

¿Ha verificado que este en realidad ¿fija las rutas en relativas?

0 votos

Yo no lo he probado, no, pero este hilo sugiere que debería funcionar: forums.esri.com/Thread.asp?c=93&f=1154&t=260812

0 votos

Además, estoy seguro de que Kirk ya sabe cómo hacer esto: forums.esri.com/Thread.asp?c=93&f=992&t=64946 :)

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