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

    bootstrap中的排版----标题: 标题(h1~h6/.h1~.h6) 副标题(small) h1:36px h2:30px h3:24px h4:18px h5:14px h6:12px 排版 ...

  2. SpringCloud及其五大常用组件之Eureka和Zuul

    1.springcloud简介 SpringCloud是Spring旗下的项目之一,它是微服务架构的一种实现方式. 官网地址:http://projects.spring.io/spring-clou ...

  3. csp-s模拟测试83(集训过半)

    csp-s模拟测试83(集训过半) 一场信心赛.起初$OJ$爆了我就看见全场$A$了$T1$并且夹杂着$A$掉$T2$我就很难受. 这场比赛没有深入思考,很失败,一个多小时后就结束了我罪恶的一生. 0 ...

  4. python-包管理工具-pip

    目录 Python pip pip相关命令 解决pip相关问题 Python pip回到顶部 Python最让人的喜欢的就是它有丰富的类库和各种第三方的包,而对于这些包的下载.删除等管理操作,就要用到 ...

  5. <前端>简单实现开心网注册

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. python函数基础(函数的定义和调用)

    函数的定义 python定义函数使用def关键字 return[表达式]语句用于退出函数,选择性的向调用方返回一个表达式,不带参数值的return语句返回none def 函数名(参数列表): 函数体 ...

  7. 用星星画菱形--Java

    用星星画菱形 public class Hello{ public static void main(String[] args) { char star = '\u2605'; System.out ...

  8. OpenGL 鼠标交互响应事件

    OpenGL 鼠标.键盘交互响应事件 先来一个样例: uses gl,glu,glut; procedure InitEnvironment;cdecl; begin glClearColor();/ ...

  9. Android开发 BottomNavigationView学习

    前言 注意这个里介绍的是AndroidX的com.google.android.material.bottomnavigation.BottomNavigationView xml布局中 <co ...

  10. SG函数模板(洛谷2197nim游戏

    #include <iostream> #include <cstdio> #include <queue> #include <algorithm> ...