这两天遇到一个奇怪的问题,在整理项目中的建筑物数据时发现,有几个图层进行字段添加后出现问题,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 P3161 [CQOI2012]模拟工厂 (贪心)

    传送门 解题思路 贪心,首先因为\(n\)比较小,可以\(2^n\)枚举子集.然后判断的时候就每次看后面的如果用最大生产力生产能不能达成目标,解一个二次函数. 代码 #include<iostr ...

  2. BZOJ 2660 (BJOI 2012) 最多的方案

    Description 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一 ...

  3. (转)I帧,P帧,B帧 .

    转:http://blog.csdn.net/abcjennifer/article/details/6577934 视频压缩中,每帧代表一幅静止的图像.而在实际压缩时,会采取各种算法减少数据的容量, ...

  4. Linq Lambda 中group by多列后count数量的写法

    直接上代码: List<Student> ss = new List<Student>(); Student ss1 = , Age = , Name = " }; ...

  5. 云-腾讯云-云通信:云通信(IM)

    ylbtech-云-腾讯云-云通信:云通信(IM) 企业数字化转型的通信助手,让通信触达全球,智联万物 1.返回顶部 1. 云通信(Instant Messaging,IM)承载亿级 QQ 用户即时通 ...

  6. JAVA基础_泛型

    什么是泛型 泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉"类型"信息,是程序的运行效率不受影响 ...

  7. php 取某一日期的前一天

    代码为: $date = “2009-01-01”;$time = strtotime($date) – 3600*24;echo date(‘Y-m-d’,$time); 或者一句:echo dat ...

  8. POJ 3376 Finding Palindromes EX-KMP+字典树

    题意: 给你n个串串,每个串串可以选择和n个字符串拼接(可以自己和自己拼接),问有多少个拼接后的字符串是回文. 所有的串串长度不超过2e6: 题解: 这题由于是在POJ上,所以string也用不了,会 ...

  9. css 图片波浪效果

    参考:https://blog.csdn.net/zhichaosong/article/details/80944924#_99 效果: wave2.png html: <!DOCTYPE h ...

  10. spring:AOP面向切面编程(注解)03

    使用注解写aop时最好使用环绕通知写 切面类: /** * 用于记录日志的工具类,它里面提供了公共的代码 */ @Component("logger") @Aspect //表示当 ...