这两天遇到一个奇怪的问题,在整理项目中的建筑物数据时发现,有几个图层进行字段添加后出现问题,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