Ich habe eine große Anzahl von Projektordnern, wobei jeder Projektordner viele Unterordner haben kann. Diese Unterordner können mxds, Shapefiles, persönliche GDBs und FGDs enthalten. In vielen Fällen hat der Benutzer vergessen, die "Relative Pfade verwenden" zu überprüfen, bevor die mxds gespeichert wurden. Wenn der Ordner kopiert wird, werden die Datenquellen-Links unterbrochen.
Ich möchte ein eigenständiges Arcpy-Skript schreiben, das durch die Verzeichnisse kriecht, jedes mxd öffnet, die relativen Pfade auf true setzt und dann das mxd speichert. Gibt es irgendwo ein Skript, das das macht?
Die relativePaths-Eigenschaft für das MapDocument-Objekt ist schreibgeschützt. Gibt es eine andere Möglichkeit, dies zu ändern?
Antworten:
Dies ist mit dem folgenden Python-Skript möglich (danke an Neil Clemmons im ESRI-Forum ). Sie benötigen die comtypes- Bibliothek und das Snippets- Modul von Pierssen Consulting.
quelle
In 10.0 nicht möglich , aber ich hatte einige Erfolge mit ArcObjects in Python für relativ einfache Aufgaben wie diese, bei denen das Schreiben einer .NET-Anwendung übertrieben wäre, aber die erforderliche Funktionalität in den arcpy / arcgisscripting-Modulen nicht verfügbar gemacht wurde. Verwenden Sie os.walk zum Crawlen des Verzeichnisbaumteils.
Verwenden Sie für das ArcObjects-Bit, um
IMapDocument.Open()
die MXD zu öffnen (ohne sie in ArcMap öffnen zu müssen), in true umzuwandelnIMxDocument
undRelativePaths
auf true zu setzen undIMapDocument.Save()
zum Speichern zu verwenden.quelle