Ответы:
Щелкните правой кнопкой мыши на mxd в ArcCatalog, выберите «Установить источники данных» и выполните массовые изменения. Однако этот инструмент предупреждает:
Примечание: этот диалог предназначен в первую очередь для подготовки документов карты к публикации. Настройки (код VBA, элементы управления пользовательского интерфейса и пользовательские панели инструментов), графики и свойства внешнего вида таблицы удаляются из файлов .mxd при обновлении их источников данных с помощью этого диалогового окна. Чтобы сохранить их, обновите источники данных в ArcMap.
Вы также можете использовать библиотеку python arcpy.mapping :
Если вы используете 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
вместо этого.
Это удалит все красные восклицательные знаки, содержащие слои в MXD, и укажет на новый созданный источник данных. Вы можете сделать это за один раз; Не нужно каждый раз кликать на красный восклицательный знак, щелкать и настраивать источник данных.
http://arcscripts.esri.com/details.asp?dbid=14922
Ссылка на старый Arcscript, называемый инструментами GDK, который можно получить на других сайтах. Программа создает панель инструментов в arcmap, где вы можете изменить источник на выбранных слоях (любой слой, который вы хотите. Это работает между подключениями SDE или SDE к локальной файловой базе геоданных (с которым источник в Arccatalog не может справиться, поскольку имя в SDE начинается с пользователь SDE, а затем точка.
это очень полезно, но, возможно, только в ArcGIS 9.3
Если у вас уже открыт .mxd, делайте то же, что делал @ blah238, но используйте 'CURRENT'
вместо полного пути. Не забывайте, что поиск и замена не должны быть полной строкой:
import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
mxd.findAndReplaceWorkspacePaths(r"scratch",
r"project/draft")
Тогда вам все равно придется сохранить и снова открыть файл .mxd.
Для одного mxd может быть достаточно инструментов ESRI по умолчанию. Но исправление нескольких mxds с неработающими ссылками может быть кошмаром. Попробуйте мой инструмент UpdateLayerRefs, чтобы исправить неограниченное количество MXD за считанные секунды: https://github.com/jswagger/UpdateLayerRefs Просто предоставьте имена входных MXD в виде списка ["Name1.mxd", "Name2.mxd", "Name3.mxd «]
Похоже, этот пост старый, но я не могу заставить его работать: код выглядит следующим образом:
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")