mxd文件数据源损坏的原因及修复方法

mxd文件数据源损坏原因

1.shapefile生成mxd后,shapefile转移了位置;

2.sde或postgres生成mxd后,sde或postgres上的原始数据删除了;

二、mxd数据源修复

1.用文件修复

这种方法比较简单,将移动或者删除的原始数据恢复即可(前提是知道该恢复哪些数据,有没有这些需要恢复的数据)

2.用python脚本修复

这种方法相当于给mxd文件找个新主人,即给mxd文件一个新的数据源(强行修改mxd文件的数据源路径),用脚本修复是比较慢的,运行这个程序大概需要十秒左右的时间

#!/usr/bin/python3
#coding=utf-8

import time
import arcpy.mapping as mapping
import sys

# 此脚本是用于修改mxd中layer的数据源,并且返回一个新的mxd文件(一个只能修改mxd中的一个layer)

# 初始的,需要改变其数据源的mxd文件,包括.mxd文档
old_mxd_path = u"E://发布了//mxd文件//测试数据01.mxd"
# layer的名字,也就是shapefile的图层名
layer_name = "test2"
# 新的数据源的路径,即 .shp 文件的上一层文件
new_mxd_path = r"E://发布了//测试图层"
# 新生成的mxd文档保存的路径,类似于 E:/发布了/mxd文件/测试数据.mxd 去掉 .mxd ;即 E:/发布了/mxd文件/测试数据,同时“测试数据”为新生成的mxd文件名字,这个名字不能与原来的mxd文件名字相同
result_mxd_path = 'E://发布了//mxd文件//测试数据'

# old_mxd_path = u"E:/发布了/mxd文件/测试数据01.mxd"
# layer_name = "test2"
# new_mxd_path = r"E:\发布了\测试图层"
# path = u"E:/发布了/mxd文件/测试数据02.mxd"

path = result_mxd_path

# 获取mxd文档
# mxd=mapping.MapDocument(u"E:/发布了/mxd文件/测试数据01.mxd")
mxd=mapping.MapDocument(old_mxd_path)

# 获取mxd文档里的layer
df = mapping.ListDataFrames(mxd)[0]

# 读取图层,中间的变量为layer的名字
# lyr = mapping.ListLayers(mxd,"test2",df)[0]
lyr = mapping.ListLayers(mxd , layer_name , df)[0]

# "========更改数据源前============="

# 替换数据源
# lyr.replaceDataSource(r"E:\发布了\测试图层" , "SHAPEFILE_WORKSPACE")
lyr.replaceDataSource(new_mxd_path , "SHAPEFILE_WORKSPACE")

# "========更改数据源后============="

# 将修改后数据源的mxd文件另存为一份mxd文件
# mxd.saveACopy(u"E:/发布了/mxd文件/测试数据02.mxd")
mxd.saveACopy(path)

print path

Guess you like

Origin blog.csdn.net/qq_45697944/article/details/105738089