一 打开不了shp文件
同学们在平常使用arcgis的时候,是否遇到了下面这样的情况。
这是由于shp文件丢失了部分数据,导致在arcgis打不开。
1个 Shape文件结构Shape文件的文件构成Shape文件由3 个文件构成: 主文件、索引文件、数据文件。它们分别是“.shp” , ".shx"".dbf”文件。
如果数据文件dbf,丢失了部分数据,就会出现上面说的打不开的错误。
二 修复
dbf文件记录的是对应的属性表信息,比如arcgis的属性表的字段、面积信息等等。
步骤如下:
1.用envi打开shp,查看shp有多少个几何实体。记录下来。
2.用DBFViewer 或者excell,打开对应的dbf文件,这里要分情况处理。
情况一:例如你在步骤1中记录该shp有15个图斑,dbf的个数是10个,这时你要填充5条假数据到dbf末端中,使dbf文件记录的几何实体与shp的几何实体数量保持一致。
情况二:例如你在步骤1中记录该shp有15个图斑,dbf的个数是20个,这时你要删除dbf末端5条,使dbf文件记录的几何实体与shp的几何实体数量保持一致。
这样就能简单修复了。
三 其他修复的方法
- envi可以直接打开shp。在envi上把shp直接另存为新的数据。
- 同理,google earth 也能直接打开shp文件,再次导出即可。
四 写代码修复的步骤
读取dbf文件,在python使用第三方库dbfread,借助dbfread可以读取dbf文件,dbfread安装如下:
pip install dbfread
下面是简单的python读取dbf示例:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
file = r'test.dbf'
from dbfread import DBF
# 读取 DBF 文件
table = DBF('test.dbf', encoding='gbk')
# 输出记录
for record in table:
print(record)
安装pyshp,读取shp文件:
pip install pyshp
下面是简单的python读取shp示例:
def get_shp_shape_records(path):
try:
# 先读取原文件的几何数据和属性数据, 返回几何数据的个数
try:
file = shapefile.Reader(path)
shape_records = file.shapeRecords()
except UnicodeDecodeError:
file = shapefile.Reader(path, encoding="gbk")
shape_records = file.shapeRecords()
except Exception as e:
print(e)
return len(shape_records)
file = r'test.shp'
a = get_shp_shape_records(file)
后面再写,暂时没这个编程实现的需求。
大概思路是用xlwt这个模块把数据写入到dbf文件中。
2024年1月10日更新
用代码修复
略。
开源代码地址在:
GitHub - ytkz11/RestoreShp: restore shape file
如果对你有帮助,请点一个star!
快捷修复
我把以上的代码打包为一个命令行的exe,如果你对代码不熟练,可以直接运行这个exe,输入对应的文件路径,完成对shape文件的修复。
在公众号(remote sensing)回复:shp修复
获得exe文件。