这两天遇到一个奇怪的问题,在整理项目中的建筑物数据时发现,有几个图层进行字段添加后出现问题,shp文件被损坏了。这问题很隐蔽,给shp添加字段后不报错,进行赋值,报错如下:

但是无论是选择“是”还是“否”都可以赋值成功,直到我对各个整理好的图层进行merger才发现,报如下错误:

即JN04_B图层无打开,不进行merger操作,只是在ArcMap中是看不出来的,只有重新打开这个shp才会发现。重新打开这个损坏的shp,会报下面的错误:

通过多次尝试,得出的结论是,JN04_B.shp在进行添加字段操作的时候,导致该数据损坏。通过google搜索,找到有网友遇到同样的问题,借鉴描述如下:

“I have a point shapefile with over 2 millions of records. I used field calculator to edit one field and deleted another field. After that, if I try to open this shape file again, it showed me an error: Number of shapes does not match the number of table records. It works fun for small shapefiles. This problem has been bugging me for days. Anyone know why and how to solve this?”  来自:http://forums.arcgis.com/threads/98126-Error-Number-of-shapes-does-not-match-the-number-of-table-records

百思不解,尝试修复shp几何结构,同样报错:

纠结个把小时不得解! 到晚上九点,帅帅找到了办法,用没有损坏的shp修复这个损坏掉的shp。过程分享如下:

在添加字段的过程中发现JN05_B.shp没有问题,不会被损坏,如是用JN05_B.shp修复JN04_B.shp。

(1)在ArcMap中打开未经任何处理的JN05_B.shp、JN04_B.shp(这时候JN04_B是可以打开的)。

(2)打开编辑工具,当前编辑图层选择JN05_B.shp,将JN05_B的所有point选中删除,保存编辑。

(3)然后选中JN04的所有point,Ctrl+C——Ctrl+V,这时候会有个弹出框,就是将JN04的所有点复制到JN05中。

(4)保存停止编辑。将JN05_B.shp改名为JN04_B.shp,这样我们就神奇的创造了新的JN04_B.shp。对这个图层进行字段添加、赋值都不会报错,与别的图层进行融合也不会报错。

检查新的JN04_B.shp,发现这个shp只保留了与JN05_B.shp完全相同的字段,当然feature的各个字段的值还是自己的值。所以在进行这个操作的时候也需谨慎,首先比较好两个shp图层的字段,考虑好自己想要保留的字段,然后在进行上面的操作。

通过对新的JN04_B.shp计算X/Y字段,发现与处理前的有些差别,大概是0.001的差别(经纬度坐标)。原想是因为再创造过程中导致的错误,但在skyline中打开处理前后的JN04_B.shp发现点是重合的,这样房子放进去后就不会出现偏移了!问题得解!!!

敬请关注:www.skylinecn.com   Skyline中文社区QQ群:205915164

ArcMap中给点shp添加字段后,shp文件破坏无法打开的更多相关文章

  1. Yii2给数据库表添加字段后对应模型无法识别到该属性的原因和解决办法

    Yii2给数据库表添加字段后对应模型无法识别到该属性的原因和解决办法 应为数据库表的结构被缓存了.删除runtime文件夹或者执行 //清理指定表结构缓存数据 Yii::$app->db-> ...

  2. 20160303 - 升级 Windows 10 版本 1511 后,文件夹默认打开方式为 cmd 的修复

    问题描述:升级 Windows 10 版本 1511 (OS 内部版本 10586.122)后,文件夹的默认打开方式变成了cmd.双击任何一个文件夹,显示相关的提示错误信息如下: [Window Ti ...

  3. 针对mysql中分表批量添加字段

    项目中有用到这种类似的分表,如果要添加一个字段的话,该怎么办呢? dba表示弄 一个脚本批量处理就行了,卧槽,这我哪会啊,于是硬着头皮又继续问dba,dba给一个脚本,一看是这样的. #!/bin/b ...

  4. 解决由于服务器调用删除或添加字段后CXF客户端未更新导致异常问题org.apache.cxf.interceptor.Fault: Unmarshalling Error: Unexpected element

    采用CXF客户端调用Webservice服务,由于服务端时不时会对Webservice服务删除或添加一些字段,而CXF未及时更新客户端代码导致再次调用服务时报异常错误: Interceptor for ...

  5. MySql存储过程批量给多个数据库中的同名表添加字段

    1 创建存储过程 batchAddField:给所有"MyDB_"开头的数据库添加新字段 -- ---------------------------- -- Procedure ...

  6. ubuntu 14.04中: 像ubuntu16.04 一样可以在文件夹内打开此路径下的shell

    sudo apt-get install nautilus-open-terminal 然后重启 ok!

  7. AE 向已存在的要素类中添加字段

    风过无痕 原文向已存在的要素类中添加字段 以前,在用AE写程序的时候,为了方便,一般都是直接新建一个MapControl窗体应用程序.这次需要解决的问题用不到窗口,就突发奇想,直接新建了一个Conso ...

  8. IDEA中Maven管理下添加mysql依赖

    在做Java Web项目的时候,不可避免的就要使用到数据库,下面就是在IDEA中添加mysql依赖的方法. 如果你看到这里,就表示你弄懂了IDEA,maven和Tomcat等,所以... 只需要在po ...

  9. ArcMAP中Excel数据转换为shp数据

    参考百度知道:http://jingyan.baidu.com/article/f7ff0bfc1cf22c2e26bb138d.html 将数据库中带有X.Y坐标的二维表转换为空间点数据:从数据中将 ...

随机推荐

  1. LUOGU P1084 疫情控制(二分+贪心+树上倍增)

    传送门 解题思路 比较神的一道题.首先发现是最小值问题,并且具有单调性,所以要考虑二分答案.其次有一个性质是军队越靠上越优,所以我们要将所有的军队尽量向上提,这一过程我们用倍增实现.发现这时有两种军队 ...

  2. BZOJ 1296(SCOI 2009) 粉刷匠

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2544 Solved: 1466 [Submit][Statu ...

  3. vue.js出现cannot get /错误

    config中的index.js 原来是 assetsPublicPath: './', 改为 assetsPublicPath: '/',

  4. Vue项目组织规范

    目录 一.项目结构的核心思想 二.项目目录结构 三.资源路径编译规则 四.index.html 五.build目录 和 config目录 六.public目录 七.static 目录 八.src目录结 ...

  5. Spring有关面试问题

    问题清单: 什么是Spring框架?Spring框架有哪些主要模块? 使用Spring框架有什么好处? 什么是控制反转(IOC)?什么是依赖注入? 请解释下Spring中的IOC? BeanFacto ...

  6. Python接口测试框架实战与自动化进阶✍✍✍

    Python接口测试框架实战与自动化进阶  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看 ...

  7. python基础语法(变量与数据类型)

    python基础语法(变量与数据类型) 一.python变量 python中的变量不需要声明.每个变量在使用钱都需要赋值,变量赋值以后,该变量才会被创建 在python中,变量就是变量,它没有类型,我 ...

  8. PHP网络请求优化

    目录 1. 设置超时时间 2. 将串行请求并行化 1. 设置超时时间 连接超时:200ms 读超时: 800ms 写超时: 500ms 2. 将串行请求并行化 使用curl_multi_*() 使用s ...

  9. (转)常用的三种修改mysql最大连接数的方法

    MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个 方法一:进入MYSQL安装目录 打开MYSQL配置文件 ...

  10. Android开发 获取视频中的信息(例如预览图或视频时长) MediaMetadataRetriever媒体元数据检索器

    前言 在Android里获取视频的信息主要依靠MediaMetadataRetriever实现 获取最佳视频预览图 所谓的最佳就是MediaMetadataRetriever自己计算的 /** * 获 ...