ArcGis中shp文件出现问号状态,打不开怎么解决?

一 打开不了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的几何实体数量保持一致。

这样就能简单修复了。

三 其他修复的方法

  1. envi可以直接打开shp。在envi上把shp直接另存为新的数据。
  2. 同理,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文件。

image-20240103161521093

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值