更改MXD中所有图层的数据源?


25

我有一个MXD。它连接到我们的SDE数据库之一中的大约30层。我想更改他们连接到的SDE数据库。

有没有一种方法可以不必右键单击每个图层并单独更改它?

Answers:


37

右键单击ArcCatalog中的mxd,单击“设置数据源”,然后从此处批量更改。但是,此工具警告:

注意:此对话框主要用于准备要发布的地图文档。使用此对话框更新其数据源时,将从.mxd文件中删除自定义项(VBA代码,UI控件和自定义工具栏),图形和表格窗口外观属性。要保留这些,请改为更新ArcMap中的数据源。

您还可以使用arcpy.mapping python库:


这似乎在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


这非常完美,谢谢!要添加的一件事是“ Database Connections \到GISSDE1.sde的连接”也可以替换为.gdb位置。
杰克·费尔菲尔德

将数据源从SAME SDE切换到版本1到版本2,我将如何使用它?
NULL.Dude17年

3
  1. 在ArcCatalog中建立数据源连接。
  2. 打开MXD并展开图层,然后单击任意图层中的红色感叹号。这将打开一个弹出窗口,其中包含具有数据库连接的数据源。
  3. 选择已建立的数据库连接,双击该连接,并将其移到您单击的层中,然后选择该层,然后按OK,Open或Add。

这将删除MXD中所有包含红色惊叹号的图层,并将指向新创建的数据源。您可以一口气做到这一点;无需每次都单击红色感叹号并单击并设置数据源。


它非常有帮助。请
彻底解决

3
仅当连接断开时,此方法才有效,否则,其他答案之一更合适。
blah238

1

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

该链接指向一个旧的名为GDK工具的Arcscript,可以在其他站点上获得。本程序在arcmap中创建一个工具栏,您可以在其中更改选定图层(所需的任何图层。在SDE连接或SDE与本地文件地理数据库之间都可以工作)(Arccatalog中的夹着更改源无法处理,因为SDE中的名称以SDE用户,然后点。

这非常有帮助,但也许仅在arcgis 9.3中


1
尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。
BradHards 2014年

我已经修改了!
jonaktiv 2014年

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
抱歉,遇到了麻烦。现在更新的自述文件....
杰里米扬鞭

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。如果您尚未这样做,请参观以了解此问答格式。最好将您的答案重新发布为一个独立的问题。确保包含在运行代码时收到的所有错误消息!
安迪
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.