Zmieniasz źródło danych dla wszystkich warstw w MXD?


25

Mam MXD. Łączy się z około 30 warstwami w jednej z naszych baz danych SDE. Chcę zmienić bazę danych SDE, z którą się łączą.

Czy można to zrobić bez klikania każdej warstwy prawym przyciskiem myszy i zmieniania jej indywidualnie?

Odpowiedzi:


37

Kliknij prawym przyciskiem myszy mxd w ArcCatalog, kliknij Ustaw źródła danych i stamtąd zmień zbiorczo. To narzędzie ostrzega jednak:

Uwaga: to okno dialogowe jest przeznaczone przede wszystkim do przygotowania dokumentów map do publikacji. Dostosowania (kod VBA, elementy sterujące interfejsu użytkownika i niestandardowe paski narzędzi), wykresy i właściwości wyglądu okna tabeli są usuwane z plików .mxd podczas aktualizacji ich źródeł danych za pomocą tego okna dialogowego. Aby je zachować, zaktualizuj źródła danych w ArcMap.

Możesz także użyć biblioteki python arcpy.mapping :


To wydaje się nie działać w 10.1. Źródło danych jest zmieniane, ale (przynajmniej w przypadku połączenia SDE) łącze jest zmieniane na „połączenie z bazą danych”, tj. Warstwa nie jest już wskazywana, co powoduje zerwanie łącza.
Michael Todd

16

Jeśli korzystasz z ArcGIS 10 i interesuje Cię korzystanie z Pythona, zapoznaj się z pomocą dotyczącą aktualizacji i naprawy źródeł danych za pomocą arcpy.mapping oraz metod obiektu Layer .

Przykład:

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project_SDE1.mxd")
mxd.findAndReplaceWorkspacePaths(r"Database Connections\Connection to GISSDE1.sde", 
                                r"Database Connections\Connection to GISSDE2.sde")
mxd.saveACopy(r"C:\Project\Project_SDE2.mxd")
del mxd

Jeśli wszystkie warstwy nie pochodzą z tego samego oryginalnego pliku połączenia lub nazwa docelowej klasy obiektów jest inna w nowym SDE, może być konieczne użycie Layer.replaceDataSourcezamiast tego.


Działa to doskonale dzięki! Jedną rzeczą do dodania jest „Połączenia z bazą danych \ Połączenie z GISSDE1.sde” również można zastąpić lokalizacją .gdb.
Jack Fairfield

Jak mógłbym to wykorzystać do przełączania źródła danych z SAMEGO SDE, ale z wersji 1 na wersję 2?
NULL.Dude

3
  1. Nawiąż połączenie ze źródłem danych w ArcCatalog.
  2. Otwórz MXD i rozwiń warstwę i kliknij czerwony wykrzyknik na dowolnej warstwie. Otworzy się okno podręczne zawierające źródło danych z połączeniem z bazą danych.
  3. Wybierz nawiązane połączenie z bazą danych, kliknij je dwukrotnie i przejdź do warstwy, którą kliknąłeś, wybierz tę warstwę i naciśnij OK, Otwórz lub Dodaj.

Spowoduje to usunięcie wszystkich czerwonych wykrzykników zawierających warstwy z MXD i wskaże nowo utworzone źródło danych. Za jednym razem możesz to zrobić; nie trzeba za każdym razem klikać czerwonego wykrzyknika oraz klikania i ustawiania źródła danych.


Jest to bardzo
pomocne.Przejdź

3
Będzie to działać tylko wtedy, gdy połączenia zostaną zerwane, w przeciwnym razie jedna z pozostałych odpowiedzi będzie bardziej odpowiednia.
blah238,

1

http://arcscripts.esri.com/details.asp?dbid=14922

Link prowadzi do starego narzędzia Arcscript o nazwie GDK, które można uzyskać na innych stronach. Program tworzy pasek narzędzi w arcmap, w którym możesz zmienić źródło na wybranych warstwach (dowolna warstwa, którą chcesz. Działa to między połączeniami SDE lub SDE na lokalną geobazę pliku (której zmiana źródła w Arccatalogu nie jest możliwa, ponieważ nazwa w SDE zaczyna się od użytkownik SDE, a następnie kropka.

jest to bardzo pomocne, ale może tylko w Arcgis 9.3


1
Chociaż ten link może odpowiedzieć na pytanie, lepiej dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
BradHards

Zmodyfikowałem!
jonaktiv

1

Jeśli masz już plik .mxd, zrób to, co zrobił @ blah238, ale użyj 'CURRENT'zamiast pełnej ścieżki. Nie zapominaj, że wyszukiwanie i zamienianie nie musi być pełnym ciągiem znaków:

import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
mxd.findAndReplaceWorkspacePaths(r"scratch", 
                                r"project/draft")

Następnie musisz zapisać i ponownie otworzyć plik .mxd.


1

W przypadku jednego MXD wystarczą domyślne narzędzia ESRI. Ale naprawianie wielu plików MDX z uszkodzonymi linkami może być koszmarem. Wypróbuj moje narzędzie UpdateLayerRefs, aby naprawić nieograniczoną liczbę MXD w kilka sekund: https://github.com/jswagger/UpdateLayerRefs Wystarczy podać nazwy wejściowych MXD jako listę [„Name1.mxd”, „Name2.mxd”, „Name3.mxd „]


Fajnie dzielę się swoim kodem :) Czy możesz trochę rozwinąć sposób jego wykorzystania?
gisnside

Absolutnie: 1. Wypełnij plik konfiguracyjny JSON:
Jeremy Swagger

Chyba pierwszy krok! Ale zastanawiam się nad tym po - Wygląda na to, że twój komentarz nie znalazł się na pierwszym miejscu w pozostałej części wiadomości. Być może powinieneś edytować swoją odpowiedź :) :)
gisnside

1
Przepraszam, dostałem coś. Aktualizacja pliku readme teraz ....
Jeremy Swagger

1
To jest poprawne. Uruchamianie python UpdateLayerRefs.py --config „update_layer_refs.config.json” pozwala na uruchomienie go w dowolnym folderze.
Jeremy Swagger

0

Wygląda na to, że ten post jest stary, ale nie mogę go uruchomić: kod wygląda następująco:

import arcpy, glob

#specify MXD location to change source data
mxd = arcpy.mapping.MapDocument(r"C:\\Users\\jrender\\Documents\\LandbaseEditing PreProd Pub Check.mxd")
workspaceCurrent = r"Database Connections\Connection to PP_GISLand_Landbase.sde"
workspaceTarget = r"Database Connections\Connection to PP_Publication_GISLand.sde" 

mxd.findAndReplaceWorkspacePaths(workspaceCurrent, workspaceTarget)

#save a new copy of MXD
mxd.saveACopy(r"C:\Users\jrender\Documents\LandbaseEditing PreProd Pub Check Repathed.mxd")

Witamy w GIS SE. Jeśli tego nie zrobiłeś, proszę wziąć wycieczkę , aby dowiedzieć się o tym formacie Q & A. Twoja odpowiedź może być najlepiej ponownie opublikowana jako własne pytanie. Pamiętaj o dołączeniu wszelkich komunikatów o błędach, które otrzymałeś po uruchomieniu kodu!
Andy,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.