Mam dużą liczbę folderów projektów, w których każdy folder projektu może mieć wiele podfolderów. Te podfoldery mogą zawierać pliki mxds, shapefile, osobiste pliki gdb i fgdb. W wielu przypadkach użytkownik zapomniał sprawdzić „Użyj ścieżek względnych” przed zapisaniem mxds, więc gdy folder zostanie skopiowany, łącza źródła danych ulegają uszkodzeniu.
Chciałbym napisać samodzielny skrypt arcpy, który przeszukuje katalogi, otwiera każdy plik mxd, ustawia parametr relativePaths na wartość true, a następnie zapisuje plik mxd. Czy jest gdzieś skrypt, który to robi?
Właściwość relativePaths w obiekcie MapDocument jest tylko do odczytu. Czy jest jakiś inny sposób, aby to zmienić?
Odpowiedzi:
Jest to możliwe przy użyciu następującego skryptu python (dzięki dzięki Neilowi Clemmonsowi z forum ESRI ). Będziesz potrzebować biblioteki comtypes i modułu Snippets od Pierssen Consulting.
źródło
Nie jest to możliwe w wersji 10.0 , ale odniosłem pewien sukces przy użyciu ArcObjects w Pythonie do stosunkowo prostych zadań, takich jak to, gdzie pisanie aplikacji .NET byłoby przesadą, ale niezbędna funkcjonalność nie została ujawniona w modułach arcpy / arcgisscripting. Użyj os.walk do przeszukiwania części drzewa katalogów.
W przypadku bitu ArcObjects użyj,
IMapDocument.Open()
aby otworzyć MXD (bez konieczności otwierania go w ArcMap), przesłać naIMxDocument
i ustawićRelativePaths
na true, i użyć,IMapDocument.Save()
aby go zapisać.źródło