一、SHP文件

Shapefile文件(简称SHP)作为ESRI一种经典的数据格式,被很多其他软件所支持,如CAD、MapGIS等,虽然也有一些限制(如无法进行拓扑分析、字段长度为10个字符等),但其仍然是广泛使用的空间数据格式。

用得多了,有时也会遇到出错的时候。

Error: Number of shapes does not match number of table records。

形状数与表记录数不一致。

二、损坏原因

如ESRI帮助文档上说常见损坏原因,并提出了解决方案:

(1)保存编辑内容时计算机崩溃

这是最常见的现象。由于软件版本不稳定或数据量大或突然断点很可能造成编辑shp文件形成损坏。

(2)添加非法几何

任何数据库都可以对其数据进行结构定义。如果有非法的几何 将导致shp文件损坏。例如,蝴蝶结。

(3)使用其他软件修改属性表

SHP文件是由多个文件组成,其中记录属性的dbf文件是不可缺少的,但如果用其他软件编辑过(例如,Microsoft Excel)也会造成文件损坏。

三、修复方法

下面是官网给出的修复方法,非常全面:

(1)    使用ArcToolBox > Data Management Tools > Features中的Check Geometry工具。此工具执行时数据的问题会被报告,或存在于输出表中。在执行后查看输出表。如果表是空的,证明没有找到坏的几何关系。如果报告有坏的几何关系,使用下面的Repair Geometry工具。

(2)    运行ArcToolBox > Data Management Tools > Features中的Repair Geometry工具。在运行后,返回再次运行Check Geometry工具以确定所有的损坏要素都被移除。依据需要往复运行Check Geometry/Repair Geometry。

(3)    导出数据岛geodatabase中,然后把他们复制到新shapefile中。

(4)    如果数据在网络驱动器上,把它复制到本地磁盘上。如果数据在本地驱动器上,把它复制到主驱动器的根目录下:例如,C:\

(5)    检查属性表中的非法字段名。字段名最多只能有10个字符,且以字母开头,不能包含空格或特殊字符,除了下划线以外。

(6)    除了下划线以外,文件名不能包含空格或特殊字符。一般来说,包含有空格的shapefile文件名可以在ArcGIS 9.x中起作用,然而为了测试请重命名shapefile是指不含空格。

(7)    在Windows资源管理器中删除所有索引(空间、属性和地理编码),投影和元数据文件。也就是删除所有的文件仅保留.shp,.dbf,.shx文件。注意在改动文件前做好备份。

(8)    尝试在其他电脑上操作这些shapefile

(9)    在其他软件中打开shapefile,最好是ArcView 3.x。如果能在ArcView 3.x中打开,尝试保存至新的shapefile,Theme > Convert To Shapefile。

(10)或者使用simple data loader或者将数据复制到ArcMap编辑进程中,将数据复制到新的要素类中。如果你的shapefile不包含很多的要素,可以一次拷贝,否则分组拷贝可能损坏的数据。当拷贝过程结束后,保存编辑,查看问题是否以去除。

(11)如果数据仍未被修复,并且Check Geometry/Repair Geometry工具报告了要素ID和损坏记录,请手动清除这些损坏的数据。

(12)在ArcGIS和ArcView 3.x中使用字段计算器计算计算字段值。计算可能停在损坏的记录上。检查损坏损坏的shapefile的属性表并确认。例如,你的shapefile有1000条记录,如果字段计算器在第750条停下来,哪门第750条或751条可能就是损坏的。要删除损坏的条目,打开ArcMap编辑,拷贝除了坏条目以外的所有行至新的shapefile中,或者尝试手动删除损坏条目。

(13)删除除FID,Shape外的所有字段,并保留一个属性字段(shapefile必须要有一个属性字段)。如果问题依然存在,添加一个新字符串字段,并删除保留的属性字段。如果问题消失,这意味着是那个字段的问题。后面你就知道该怎么做了。

(14)使用Shapefile Repaier Utility

(15)使用Shapefile Repair Utility(不要与Shapefile Repaier Utility弄混)

(16)使用FunkFinder

(17)下载并运行CleanShapefile utility(只针对ArcGIS 8.3)

四、实例

先尝试使用"检查几何",无效,因为根本就打不开,所以没法检查。

再尝试复制一下数据:

问题出来了,形状数与表记录数不一致!(注意与多部件是有区别的)。可以造成的原因是编辑异常或通过其他方式修改过dbf文件。

最后shapech工具修复了SHP文件。

操作方法:先备份数据,然后加载Shapefile数据,读取数据信息,修复shx,再修复dbf。

修复损坏的 shapefile的更多相关文章

  1. ArcGIS自定义工具箱-修复损坏的工作空间

    ArcGIS自定义工具箱-修复损坏的工作空间 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:替换数据源的工作空间 用途:针对损坏的数据源,批量进行修复 案例数 ...

  2. Word恢复文本转换器-修复损坏的WORD文件

    第一步:找任意一个未损坏的文件打开word,新建的或者是已有的好的word文档,在文档的工具-选项-常规中,选中“打开时确认转换”复选框,并按确定. 第二步:点击word软件左上角的 文件-打开,找到 ...

  3. CentOS重装grub修复损坏的系统

    grub损坏一般有两种情况:第一.安装双系统时,后安装的系统把先安装的系统的MBR删除了.第二.误操作将grub文件删除了. 不管怎样都需要进入到救援模式,详细请看CentOS通过光盘启动救援数据 ( ...

  4. 如何修复损坏的MySQL数据表

    id=164 由于断电或非正常关机而导致MySQL数据库出现错误是非常常见的问题.有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用M ...

  5. oracle11g ASM(修复损坏的磁盘组头asm修复2)

    --编KFED [oracle@rac2 lib]$cd $ORACLE_HOME/rdbms/lib [oracle@rac2 lib]$ pwd /u01/app/oracle/product/1 ...

  6. MySQL之——崩溃-修复损坏的innodb:innodb_force_recovery

    转: https://blog.csdn.net/l1028386804/article/details/77199194 一.问题描述 今天在线运行的一个mysql崩溃了. 查看错误日志,如下: - ...

  7. [转]MySQL之——崩溃-修复损坏的innodb:innodb_force_recovery

    原文 https://blog.csdn.net/l1028386804/article/details/77199194 1. mysql崩溃 --------------------------- ...

  8. 【教程】教你解决“Windows 资源保护找到了损坏文件但无法修复其中某些文件”的问题【转载】

    转载:http://www.cystc.org/?p=2827 很多人都会用sfc /scannow来解决系统文件损坏的问题,但有时也会遇到连sfc都无法修复的情况,最常见的就是出现“Windows ...

  9. Windows自动联网修复系统损坏文件

    sfc修复: Win+X---命令提示符(管理员)---sfc /scannow---Enter可以查看是否存在系统文件损坏等问题 以管理员权限运行命令提示符,执行“dism /online /cle ...

随机推荐

  1. 网站(Web)压测工具Webbench源码分析

    一.我与webbench二三事 Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能.Webbench ...

  2. Codeforces Beta Round #37 B. Computer Game 暴力 贪心

    B. Computer Game 题目连接: http://www.codeforces.com/contest/37/problem/B Description Vasya's elder brot ...

  3. Codeforces Round #254 (Div. 1) C. DZY Loves Colors 分块

    C. DZY Loves Colors 题目连接: http://codeforces.com/contest/444/problem/C Description DZY loves colors, ...

  4. 通过IP获取所在城市

    <script type="text/javascript"> var map = new BMap.Map("allmap"); var poin ...

  5. 如何使用mysql存储树形关系

    最近遇到业务的一个类似文件系统的存储需求,对于如何在mysql中存储一颗树进行了一些讨论,分享一下,看看有没有更优的解决方案. 一.现有情况 首先,先假设有这么一颗树,一共9个节点,1是root节点, ...

  6. Android音效SoundPool问题:soundpool 1 not retry

    Android音效SoundPool问题:soundpool 1 not retry 今天开发中要用到SoundPool,遇到soundpool 1 not retry无法播放声音,MediaPlay ...

  7. 如何使用C#关键字const,readonly,static

    如果有一个值不太会变化,我们经常使用const和readonly,这2者有何不同呢?有时候,我们也会在readonly之前加上关键字static,这又意味着什么呢? const ● const默认是静 ...

  8. 03把IL编译成可执行文件

    1.在记事本中编写IL代码如下: .assembly HelloWorld{} .assembly extern mscorlib{}   .method public static void Mai ...

  9. MVC二级联动使用$.ajax方法获取后端返回的字符串

    在"MVC二级联动使用$.getJSON方法"中使用$.getJSON()获取后端返回的JSon. 本篇使用jQuery的$.ajax()获取后端返回的字符串,实现二级联动.   ...

  10. Ext ComboBox 动态查询

    Ext中的combobox有属性typeAhead:true 可以实现模糊匹配,但是是从开始匹配的,如果需要自定的的匹配,则需要监听beforequery方法,实现自己的匹配查询方法: var gfx ...