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?

brenth
źródło

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 :

MapMan
źródło
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.

blah238
źródło
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.

Inderjeet singh bhambra
źródło
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

jonaktiv
źródło
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.

jazzabeanie
źródło
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 „]

Jeremy Swagger
źródło
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")
EgmontDeVos
źródło
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,