是否有一种方法可以不必右键单击每个图层并单独更改它?
#1 楼
右键单击ArcCatalog中的mxd,单击“设置数据源”,然后从此处批量更改。但是,此工具会警告:注意:此对话框主要用于准备要发布的地图文档。使用此对话框更新其数据源时,将从.mxd文件中删除自定义项(VBA代码,UI控件和自定义工具栏),图形和表格窗口外观属性。要保留这些内容,请改用ArcMap中的数据源。
还可以使用arcpy.mapping python库:
#2 楼
如果您使用的是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位置。
–杰克·费尔菲尔德
17年1月4日,19:41
从SAME SDE但从版本1切换到版本2,我将如何使用它呢?
–NULL.Dude
17年4月6日在12:32
#3 楼
在ArcCatalog中建立数据源连接。
打开MXD并展开图层,然后单击任意图层中的红色感叹号。这将打开一个弹出窗口,其中包含带有数据库连接的数据源。
选择您已建立的数据库连接,双击它,然后将其放入您单击的层中,然后选择该层并按OK。 ,打开或添加。
这将删除MXD中所有包含红色惊叹号的图层,并指向新创建的数据源。您可以一口气做到这一点;无需每次都单击红色感叹号并单击并设置数据源。
评论
这非常有帮助。请仔细阅读
– Inderjeet Singh Bhambra
2012年12月20日下午6:13
仅当连接断开时,此方法才有效,否则,其他答案之一更合适。
–blah238
2012年12月20日下午6:29
#4 楼
http://arcscripts.esri.com/details.asp?dbid=14922该程序在arcmap中创建一个工具栏,您可以在其中更改选定图层(所需的任何图层上的源。这在SDE连接或SDE与本地文件地理数据库之间起作用(由于SDE中的名称以SDE开头,因此Arccatalog中的更改源无法处理)用户,然后点。
这非常有帮助,但可能仅在arcgis 9.3中有效
评论
尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。
– BradHards
14年2月14日在10:01
我已经修改了!
– jonaktiv
14年2月14日在12:57
#5 楼
如果您已经打开.mxd,请执行@ blah238的操作,但请使用'CURRENT'
而不是完整路径。不要忘记搜索和替换不必是完整的字符串:import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
mxd.findAndReplaceWorkspacePaths(r"scratch",
r"project/draft")
然后,您仍然必须保存并重新打开.mxd文件。
#6 楼
对于一个mxd,默认的ESRI工具就足够了。但是用断开的链接修复多个mxds可能是一场噩梦。尝试使用我的UpdateLayerRefs工具在几秒钟内修复无限的MXD:https://github.com/jswagger/UpdateLayerRefs只需将输入MXD的名称作为列表提供
[“ Name1.mxd”,“ Name2 .mxd”,“ Name3.mxd”]
评论
很好地共享您的代码:)您能否详细说明如何使用它?
–gisnside
17年8月28日在17:27
绝对:1.填写JSON配置文件:
– Jeremy Swagger
17年8月29日在20:46
我猜第一步!但是我想知道之后-似乎您的评论在其余的信息中没有引起关注。您也许应该编辑答案:) :)
–gisnside
17年8月29日在20:53
抱歉,遇到了麻烦。正在更新自述文件。
– Jeremy Swagger
17年8月29日在21:06
那是对的。运行python UpdateLayerRefs.py --config“ update_layer_refs.config.json”允许您在任何文件夹中运行它。
– Jeremy Swagger
17年8月29日在21:20
#7 楼
似乎这篇文章很旧,但是我无法使它正常工作:代码如下: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。如果您尚未这样做,请参观以了解此问答格式。最好将您的答案重新发布为一个独立的问题。确保包含运行代码时收到的所有错误消息!
–安迪
18-10-11在17:33
评论
在10.1中似乎不起作用。数据源已更改,但是(至少在SDE连接的情况下)链接更改为“数据库连接”,即该层不再指向该链接,从而断开了该链接。
–迈克尔·托德(Michael Todd)
2012年9月6日15:28