ArcMap中给点shp添加字段后,shp文件破坏无法打开
这两天遇到一个奇怪的问题,在整理项目中的建筑物数据时发现,有几个图层进行字段添加后出现问题,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文件破坏无法打开的更多相关文章
- Yii2给数据库表添加字段后对应模型无法识别到该属性的原因和解决办法
Yii2给数据库表添加字段后对应模型无法识别到该属性的原因和解决办法 应为数据库表的结构被缓存了.删除runtime文件夹或者执行 //清理指定表结构缓存数据 Yii::$app->db-> ...
- 20160303 - 升级 Windows 10 版本 1511 后,文件夹默认打开方式为 cmd 的修复
问题描述:升级 Windows 10 版本 1511 (OS 内部版本 10586.122)后,文件夹的默认打开方式变成了cmd.双击任何一个文件夹,显示相关的提示错误信息如下: [Window Ti ...
- 针对mysql中分表批量添加字段
项目中有用到这种类似的分表,如果要添加一个字段的话,该怎么办呢? dba表示弄 一个脚本批量处理就行了,卧槽,这我哪会啊,于是硬着头皮又继续问dba,dba给一个脚本,一看是这样的. #!/bin/b ...
- 解决由于服务器调用删除或添加字段后CXF客户端未更新导致异常问题org.apache.cxf.interceptor.Fault: Unmarshalling Error: Unexpected element
采用CXF客户端调用Webservice服务,由于服务端时不时会对Webservice服务删除或添加一些字段,而CXF未及时更新客户端代码导致再次调用服务时报异常错误: Interceptor for ...
- MySql存储过程批量给多个数据库中的同名表添加字段
1 创建存储过程 batchAddField:给所有"MyDB_"开头的数据库添加新字段 -- ---------------------------- -- Procedure ...
- ubuntu 14.04中: 像ubuntu16.04 一样可以在文件夹内打开此路径下的shell
sudo apt-get install nautilus-open-terminal 然后重启 ok!
- AE 向已存在的要素类中添加字段
风过无痕 原文向已存在的要素类中添加字段 以前,在用AE写程序的时候,为了方便,一般都是直接新建一个MapControl窗体应用程序.这次需要解决的问题用不到窗口,就突发奇想,直接新建了一个Conso ...
- IDEA中Maven管理下添加mysql依赖
在做Java Web项目的时候,不可避免的就要使用到数据库,下面就是在IDEA中添加mysql依赖的方法. 如果你看到这里,就表示你弄懂了IDEA,maven和Tomcat等,所以... 只需要在po ...
- ArcMAP中Excel数据转换为shp数据
参考百度知道:http://jingyan.baidu.com/article/f7ff0bfc1cf22c2e26bb138d.html 将数据库中带有X.Y坐标的二维表转换为空间点数据:从数据中将 ...
随机推荐
- ros清理日志文件
检查日志文件: rosclean check 清理日志文件: rosclean purge
- BZOJ 1296(SCOI 2009) 粉刷匠
1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2544 Solved: 1466 [Submit][Statu ...
- inspect模块的使用
一.介绍 inspect模块主要的四种用处: 1.对是否是模块.框架.函数等进行类型检测 2.获取源码 3.获取类或函数的参数信息 4.解析堆栈 二.使用 只写了2个自己用到的方法,方法太用,http ...
- h5判断是否为iphonex
js移动端页面判断是否是iphoneX 转自https://blog.csdn.net/weixin_39924326/article/details/80352929 function isIPho ...
- python环境变量配置 - CSDN博客
一.下载: 1.官网下载python3.0系列(https://www.python.org/) 2.下载后图标为: 二.安装: Window下: 1.安装路径: 默认安装路径:C:\python35 ...
- 5.1_Spring Boot2.x安装Docker
1.简介 Docker是一个开源的应用容器引擎:是一个轻量级容器技术: Docker 是一个开源的应用容器引擎,基于Go 语言并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用 ...
- C++的注释
### 1.2 注释 **作用**:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码 **两种格式** 1. **单行注释**:// 描述信息 - 通常放在一行代码的上方,或者一条语句的 ...
- Ubuntu vi命令
最近在使用ubuntu,在linux下,要编辑文件或者其他的文本文件,哪那么一个ubuntu linux下的强大的文本编辑工具就不得不提了,那就是VI编辑器.下面把VI常用到的命令行贴出来. :w ...
- mysql 多表join
两个表可以简单地写为 select a.,b. from a left join b on a.id =b.id; 三个以上 select a.,b. from a left join b on a. ...
- postgresql数据库安装后的pgadmin4切换中文
如图所示