ESRI Shapefile(shp),或简称shapefile,是美国环境系统研究所公司(ESRI)开发的一种空间数据开放格式。该文件格式已经成为了地理信息软件界的一个开放标准。Shapefile文件用于描述几何体对象:点,折线与多边形。在日常工作中,我们时常会遇到shapefile文件损坏无法打开的问题,本文将对此类问题产生的原因进行阐述,并提供一种解决问题的方法。
在尝试使用ArcMap添加shapefile文件时,有时会出现此类提示,具体描述为“打开要素类时出错,形状数与表记录数不一致”(Error: Number of shapes does not match number of table records。)。参考ESRI帮助文档,可知产生上述错误的原因主要有以下三种。这是最常见的现象。由于软件版本不稳定或数据量大或突然断点很可能造成编辑shp文件形成损坏。任何数据库都可以对其数据进行结构定义。如果有非法的几何 将导致shp文件损坏。SHP文件是由多个文件组成,其中记录属性的dbf文件是不可缺少的,但如果用其他软件编辑过(例如,Microsoft Excel)也会造成文件损坏。要解决此类问题,首先需要对shapefile的文件结构有一定了解,一个Shapefile文件最少包括三个文件:主文件(*.shp)--存储地理要素的几何图形的文件。索引文件(*.shx)--存储图形要素与属性信息索引的文件。dBASE表文件(*.dbf)--存储要素信息属性的dBase表文件。几何体的空间索引文件(*.sbn 和 *.sbx)、只读的Shapefiles的几何体的空间索引文件(*.fbn 和*.fbx)、列表中活动字段的属性索引(*.ain 和 *.aih)、可读写Shapefile文件的地理编码索引(.ixs)、可读写Shapefile文件的地理编码索引(*.mxs)、用于描述.dbf文件的代码页,指明其使用的字符编码的描述文件(*.cpg)。
根据报错提示“形状数与表记录数不一致”可知,shapefile文件无法打开是由于其三个基本构成文件中的.shx和.dbf无法相互匹配造成的。.shx文件记录的图形数与.dbf记录的表记录数不一致,由于shapefile文件已无法打开,修改图形较为困难,本文选择的思路为修改.dbf的表记录数使其与.shx记录的图形数保持一致来解决问题。具体方案如下:通过Shape Checker工具获取.shx记录的图形数,通过dbf编辑软件增减表记录数使其与图形数保持一致。本文用到Shape Checker及DBF Viewer 2000两款软件均可在网络上找到免费的下载路径,在此不多赘述。(1)首先备份一下受损数据原文件,然后在Shape Checker中加载受损矢量文件,并构建shx,获取图形数为11820。(2)在DBF Viewer 2000中打开受损矢量的.dbf文件,添加两条记录使表记录数达到11820。
(3)在ArcMap中打开修复后的矢量文件,需注意,修复后的数据新加的dbf中的记录可能与实际不一致,需要手工排查一下。
作为地信工作者,在日常的工作中,我们越来越离不开shapefile文件,若shapefile文件损坏后无法修复,往往意味着我们一天甚至几天的工作白费。本文分析了错误产生的原因并提供了一种简单可行的方法解决此类问题。