Изменение источника данных для всех слоев в MXD?

25

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

Есть ли способ сделать это без необходимости щелкать правой кнопкой мыши на каждом слое и изменять его индивидуально?

brenth
источник

Ответы:

37

Щелкните правой кнопкой мыши на mxd в ArcCatalog, выберите «Установить источники данных» и выполните массовые изменения. Однако этот инструмент предупреждает:

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

Вы также можете использовать библиотеку python arcpy.mapping :

MapMan
источник
Кажется, это не работает в 10.1. Источник данных изменяется, но (по крайней мере, в случае соединения SDE) ссылка изменяется на «соединение с базой данных», т. Е. Слой больше не указывается, что разрывает связь.
Майкл Тодд
16

Если вы используете ArcGIS 10 и заинтересованы в использовании Python, обратитесь к справке по Обновлению и исправлению источников данных с помощью arcpy.mapping и методам объекта Layer .

Пример:

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вместо этого.

blah238
источник
Это работает отлично, спасибо! Одна вещь, которую нужно добавить: «Соединения с базой данных \ Соединение с GISSDE1.sde» также можно заменить на местоположение .gdb.
Джек Фэйрфилд
Как бы я мог использовать это при переключении источника данных из того же SDE, но с версии 1 на версию 2?
NULL. Чувак
3
  1. Установите соединение с источником данных в ArcCatalog.
  2. Откройте MXD, разверните слой и нажмите на красный восклицательный знак в любом слое. Откроется всплывающее окно, содержащее источник данных с подключением к базе данных.
  3. Выберите соединение с базой данных, которое вы установили, дважды щелкните по нему и перейдите в него к слою, который вы щелкнули, выберите этот слой и нажмите OK, Открыть или Добавить.

Это удалит все красные восклицательные знаки, содержащие слои в MXD, и укажет на новый созданный источник данных. Вы можете сделать это за один раз; Не нужно каждый раз кликать на красный восклицательный знак, щелкать и настраивать источник данных.

Инджеит Сингх Бхамбра
источник
Это очень полезно.
Пожалуйста,
3
Это будет работать только в случае разрыва соединений, в противном случае один из других ответов более уместен.
blah238
1

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

Ссылка на старый Arcscript, называемый инструментами GDK, который можно получить на других сайтах. Программа создает панель инструментов в arcmap, где вы можете изменить источник на выбранных слоях (любой слой, который вы хотите. Это работает между подключениями SDE или SDE к локальной файловой базе геоданных (с которым источник в Arccatalog не может справиться, поскольку имя в SDE начинается с пользователь SDE, а затем точка.

это очень полезно, но, возможно, только в ArcGIS 9.3

jonaktiv
источник
1
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится.
BradHards
Я изменил!
jonaktiv
1

Если у вас уже открыт .mxd, делайте то же, что делал @ blah238, но используйте 'CURRENT'вместо полного пути. Не забывайте, что поиск и замена не должны быть полной строкой:

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

Тогда вам все равно придется сохранить и снова открыть файл .mxd.

jazzabeanie
источник
1

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

Джереми Сваггер
источник
Приятно поделиться своим кодом :) Можете немного рассказать о том, как его можно использовать?
17
Абсолютно: 1. Заполните конфигурационный файл JSON:
Джереми Сваггер
Первый шаг, я догадался! Но я задаюсь вопросом о том, что после ... Кажется, ваш комментарий остался без ответа. Возможно, вы должны отредактировать свой ответ вместо этого :) :)
gisnside
1
Извините, что-то свалило. Обновление файла readme сейчас ...
Джереми Сваггер
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")
EgmontDeVos
источник
Добро пожаловать в ГИС ЮВ. Если вы еще не сделали этого, пожалуйста , возьмите тур , чтобы узнать об этом Q & A формате. Ваш ответ может быть лучше опубликован как вопрос самостоятельно. Обязательно включите любые сообщения об ошибках, которые вы получили при запуске кода!
Энди