一、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. ZOJ 3631 Watashi's BG DFS

    J - Watashi's BG Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Subm ...

  2. vue 组件开发 props 验证

    使用props 在Vue中父组件向子组件中传送数据是通过props实现的,一个简单的使用props的例子: <!DOCTYPE html> <html> <head> ...

  3. ASP.NET 构建高性能网站 第4篇

    部署优化 我们都知道,不同的部署方式对站点的性能是有影响的,可能有些朋友已经知道了这点,不管怎样,我们这里还是详细系统的讲述一下这个问题,熟悉的朋友权当回顾J. Release方式编译项目 如果我们的 ...

  4. tomcat-调整内存参数

    查看Tomcat的默认内存参数: <% /; /; /; out.println("max="+max); out.println("total="+to ...

  5. java中HashMap在多线程环境下引起CPU100%的问题解决

    最近项目中出现了Tomcat占用CPU100%的情况,原以为是代码中出现死循环,后台使用jstack做了dump,发现是系统中不合理使用HashMap导致出现了死循环(注意不是死锁). 产生这个死循环 ...

  6. 事件冒泡 比bubble

    冒泡的概念就是 当子元素触发事件的时候 相应的祖宗十八代素也会触发相同的事件(前提父元素也添加了一样的事件)eg:儿子 有一个onclick 祖宗十八代 也有onclick 当点击儿子的时候 祖宗十八 ...

  7. git pull的时候出错: Git Couldn't reserve space for cygwin's heap

    具体: 1. 运行CMD,以管理员身份打开 2. 运行:rebase.exe -b 0x50000000 msys-1.0.dll 再次git pull的时候,不再报错 转自:http://doc.o ...

  8. Maven系列--setting.xml 配置详解

    文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用户配置: ${user.home}/.m2/settings.xml note:用户配置优先于全局配置.${use ...

  9. gcc 内联汇编

    http://www.cnblogs.com/zhuyp1015/archive/2012/05/01/2478099.html

  10. [INSTALL_FAILED_OLDER_SDK]错误

    在写完Demo后,执行时发现控制台打印出这么一段话:[INSTALL_FAILED_OLDER_SDK]错误. 原因是由于:測试机或者我们所用的虚拟机的android版本号太低. defaultCon ...