打开要素类错误.几何形状数量与表的纪录数不匹配

前言

在Arcgis中打开Shapefile文件遇到这种问题,返回错误:“打开要素类错误.几何形状数量与表的纪录数不匹配。”

image-20200313192537578

问题分析

Arcgis提示已很明确,形状数与表记录数不一致,即图形与属性表的记录数不一致,情况也就两种,一是图形比属性记录数多,另一种就是图形比属性记录数少。

出现第一种情况原因很多,可能是意外断电或者程序崩溃,属性未得到及时保存,也可能有其他的原因;第二种可能是在编辑过程中只增加了属性记录,而未进行图形的增加。还有就是可能通过其他的软件对shp附带的dbf文件进行了编辑,造成记录的增多或减少,进而造成图形与属性记录不一致。

解决办法

不管问题出现是什么原因,解决办法很简单。那就是属性记录少了就补上,多了就删掉。那么如何得知属性表记录是多了还是少了呢,就要用到一个叫 shapechk 的工具,工具执行顺序 Shapefile——Build Shx——Check DBF。因为造成问题的原因有很多,程序在简单问题情况下,会自动处理,而复杂情况下就需要手动处理了。

image-20200313192643817

手动处理步骤

选择shp文件,点击Build Shp按钮,会弹窗提示是否删除现有索引文件,点击确定会删除shp附带的sbn和sbx文件,在程序中可以看到有614个要素,在这里就拿到了图形数。

image-20200313192749100

再点击Check DBF,可以看到dbf记录数为611,比图形数少了3个。

image-20200313192816337

也无需其他dbf编辑软件,将shp附带的dbf文件改个与shp不同的名字,用Arcgis打开——开始编辑——增加三条记录——停止编辑——保存。再将名称改回去,再用Arcgis打开就会发现问题已解决了。

问题扩展

有些爱动脑的小伙伴们不禁又要问了,你这样修复之后属性和图形还是对应的吗?还真是不一定,这要分几种情况:

  • dbf记录多了,这种情况一般修复后没问题,即使在shp文件中存在几何为空的要素,shapechk也是会将其认定为一个图形的,所以不用担心dbf记录删多了,而一般情况下是不会在dbf中间去插入记录的,所以删除的多数情况并不会造成图形与属性匹配问题。
  • dbf记录少了,如果由于各种意外情况删除的是最后的几条记录,那么影响的只是最后的图形丢失属性,问题不大;如果删除的是中间的记录,虽然手工修复将记录补齐,则会造成从删除位置开始的属性错位问题。如果出现这种问题就要自求多福了,如果你的属性中存在与图形有关的属性,那就可以相互验证进行调整,如果没有那就只能提醒你下次小心点了,数据无价,谨慎操作。

修复几何

对于以上问题修复几何为什么没有作用呢,这里就把修复几何的帮助搬过来,可以看到并没有针对以上问题的修复,在矢量编辑过程中要注意数据规范,避免出现下面的这些问题。

检查要素类中每个要素的几何问题。发现几何问题后,将应用相关修复,并打印一行描述,以便识别要素并确定遇到的问题。

有效的输入为 shapefile、个人地理数据库要素类和文件地理数据库要素类。

  • 下面是所有几何问题和此工具将执行的相应修复的列表:
    • Null geometry - 从要素类中删除记录。要保留具有空几何的记录,请取消选中删除几何为空的要素(使用 Python 中有关 KEEP_NULL 参数的 delete_null 选项)。
    • Short segment - 删除几何的短线段。
    • Incorrect ring ordering - 更新几何以获得正确的环走向。
    • Incorrect segment orientation - 更新几何以获得正确的线段方向。
    • Self intersections - 融合面中的重叠区域。
    • Unclosed rings - 通过连接环的端点可将非闭合环闭合。
    • Empty parts - 删除 null 或空的部分。
    • Duplicate vertex - 删除其中一个折点。
    • Mismatched attributes - 更新 z 或 m 坐标以实现匹配。
    • Discontinuous parts - 根据现有的不连续部分创建多部分。
    • Empty Z values:将 z 的值设置为 0。
    • Bad envelope - 更新要素的包络矩形以实现更正。