Зміна джерела даних для всіх шарів у MXD?


25

У мене MXD. Він підключається до приблизно 30 шарів в одній з наших баз даних SDE. Я хочу змінити базу даних SDE, до якої вони підключаються.

Чи є спосіб це зробити, не потребуючи клацання правою кнопкою миші на кожному шарі та змінити його окремо?

Відповіді:


37

Клацніть правою кнопкою миші на mxd в ArcCatalog, клацніть на Встановити джерела даних та масово змінити звідти. Однак цей інструмент попереджає:

Примітка: це діалогове вікно призначене насамперед для підготовки картографічних документів до публікації. Налаштування (код VBA, елементи керування користувальницьким інтерфейсом та панелі інструментів), графіки та властивості зовнішнього вигляду вікна таблиці видаляються з файлів .mxd, коли ви оновлюєте їх джерела даних за допомогою цього діалогового вікна. Щоб зберегти їх, оновіть джерела даних замість ArcMap.

Ви також можете використати бібліотеку arcpy.mapping python:


Здається, це не працює в 10.1. Джерело даних змінюється, але (принаймні, у випадку з'єднання SDE) посилання змінюється на "з'єднання з базою даних", тобто шар більше не вказується, що розриває посилання.
Майкл Тодд

16

Якщо ви використовуєте ArcGIS 10 і зацікавлені у використанні Python, ознайомтеся з довідкою щодо оновлення та виправлення джерел даних за допомогою arcpy.mapping та методів об’єкта шару .

Приклад:

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

Якщо ваші шари не всі джерела одного і того ж оригінального файлу з'єднання або назва нового класу функцій призначення відрізняється в новому SDE, можливо, вам доведеться використовувати Layer.replaceDataSourceзамість цього.


Це прекрасно дякує! Варто додати ще одне - «Підключення до бази даних \ Підключення до GISSDE1.sde» також можна замінити на .gdb.
Джек Ферфілд

Як я можу використовувати це для переключення джерела даних з SAME SDE, але з версії 1 до версії 2?
NULL.Dude

3
  1. Зробіть з'єднання з джерелом даних в ArcCatalog.
  2. Відкрийте MXD і розгорніть шар і натисніть на червоний знак оклику в будь-якому шарі. Це відкриє спливаюче вікно, що містить джерело даних із підключенням до бази даних.
  3. Виберіть з'єднання з базою даних, яке ви зробили, двічі клацніть по ньому і перейдіть всередину до того шару, який ви натиснули, і виберіть цей шар і натисніть ОК, Відкрити або Додати.

Це видалить увесь червоний знак оклику, що містить шари в MXD, і вкаже на нове створене джерело даних. За один раз ви можете це зробити; не потрібно щоразу натискати червоний знак оклику та клацати та встановлювати джерело даних.


Це дуже корисно. Пройдіться цим разом один раз
Inderjeet singh bhambra

3
Це спрацює лише в тому випадку, коли з'єднання розірвані, інакше одна з інших відповідей більш відповідна.
blah238

1

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

Посилання на старий Arcscript під назвою інструменти GDK, які можна отримати на інших сайтах. Програма створює в arcmap панель інструментів, де ви можете змінити джерело на вибраних шарах (будь-який шар, який ви хочете. Це працює між з'єднаннями SDE або SDE на локальну базу даних геоданих (з якою джерело зміни в Arccatalog не може обробити, оскільки ім'я в SDE починається з користувач SDE, а потім крапка.

це дуже корисно, але, можливо, лише в аркг. 9.3


1
Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться.
BradHards

Я змінив!
jonaktiv

1

Якщо ви вже відкрили .mxd, зробіть те, що зробив @ blah238, але використовуйте 'CURRENT'замість повного шляху. Не забувайте, що пошук і заміна не повинні бути повними рядками:

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

Тоді вам доведеться зберегти і знову відкрити .mxd файл.


1

Для одного mxd може бути достатньо інструментів ESRI за замовчуванням. Але виправити декілька mxds з розірваними посиланнями може бути кошмаром. Спробуйте мій інструмент UpdateLayerRefs, щоб виправити необмежену кількість MXD за лічені секунди: https://github.com/jswagger/UpdateLayerRefs Просто введіть імена ваших вхідних MXD як список ["Name1.mxd", "Name2.mxd", "Name3.mxd "]


Приємно поділитися своїм кодом :) Чи можете ви трохи розібратися, як можна ним користуватися?
gisnside

Абсолютно: 1. Заповніть конфігураційний файл JSON:
Jeremy Swagger

Перший крок, я здогадався! Але мені цікаво після - Здається, ваш коментар не потрапив у грунт для решти повідомлення. Ви можете замість цього відредагувати свою відповідь :) :)
gisnside

1
Вибачте, щось натягнуло. Оновлення файлу readme зараз ....
Jeremy Swagger

1
Це правильно. Запуск python UpdateLayerRefs.py --config "update_layer_refs.config.json" дозволяє запускати його в будь-якій папці.
Джеремі Сваггер

0

Здається, що ця публікація стара, але я не можу змусити її працювати: код наступний:

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")

Ласкаво просимо до GIS SE. Якщо ви цього не зробили, скористайтеся екскурсією, щоб дізнатися про цей формат запитань. Ваша відповідь, можливо, найкраще буде розміщена як власне питання. Не забудьте включити будь-які повідомлення про помилки, отримані під час запуску коду!
Енді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.