zoukankan      html  css  js  c++  java
  • Arcgis-Issues_02Shp文件修复

    前言

    在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 - 更新要素的包络矩形以实现更正。
  • 相关阅读:
    容器级虚拟化如何进行资源分配
    容器虚拟化实现的原理
    tensorflow报cudnn错误
    nginx调优
    mysql主从原理及配置
    新安装mysql,如何提升mysql安全性
    LINUX系统软件安装和卸载的常见方法
    如何增加黑客通过ssh入侵的难度--保护ssh的三把锁
    ubuntu-docker入门到放弃(八)创建支持SSH服务的镜像
    ubuntu-docker入门到放弃(七)操作系统
  • 原文地址:https://www.cnblogs.com/bigmonk/p/12498023.html
Copyright © 2011-2022 走看看