ListBrokenDataSources
摘要
返回地图文档 (.mxd) 中图层对象的 Python 列表,或已与其最初源数据断开连接的图层 (.lyr) 文件。
讨论
即使仅返回一个损坏的图层,ListBrokenDataSources 始终返回 Python 列表对象。为返回单个图层对象,在列表上必须使用索引值(例如,brkLyr = arcpy.mapping.ListBrokenDataSources(mxd)[0])。列表上的 For 循环提供简单的机制迭代列表中的每个项目(例如,for brkLyr in arcpy.mapping.ListBrokenDataSources(mxd):)。
因为用户和密码信息没有在图层文件内或地图文档内保存,所以地图文档或图层文件内的一些图层可能受密码保护。打开包含这些图层的地图文档时通常会提示用户输入相应的信息。默认情况下,arcpy.mapping 脚本环境将在执行过程中禁止这些对话框,但这意味着将按照图层数据源已损坏的方式来处理图层。换言之,受保护的图层将不会在任何输出中进行渲染。如果希望使这些图层能够被正确渲染,则应采取如下做法。首先,将用户名和密码信息随图层一同保存。其次,CreateArcSDEConnectionFile 地理处理函数允许您创建在内存中持久的连接。如果在打开具有 MapDocument 函数的地图文档 (.mxd) 或具有 Layer 函数的图层文件前使用此命令,那么 SDE 图层将得到渲染,而不是显示为已损坏。目前尚没有针对受保护 Web 服务的替代方法。有关代码示例,请参阅图层帮助。
要了解有关自动修复损坏图层的详细信息,请参阅:更新和修复数据源。
语法
参数 | 说明 | 数据类型 |
map_document_or_layer |
A variable that references a MapDocument or Layer object. | Object |
数据类型 | 说明 |
Layer |
图层对象的 Python 列表。 |
代码示例
此脚本搜索单个文件夹中所有地图文档内的损坏数据源。将打印包含地图文档名称和损坏源的报告。
import arcpy, os path = r"C:\Project" for fileName in os.listdir(path): fullPath = os.path.join(path, fileName) if os.path.isfile(fullPath): basename, extension = os.path.splitext(fullPath) if extension == ".mxd": mxd = arcpy.mapping.MapDocument(fullPath) print "MXD: " + fileName brknList = arcpy.mapping.ListBrokenDataSources(mxd) for brknItem in brknList: print "\t" + brknItem.name del mxd