【GIS数据处理】 利用空间关系建立线CAD数据和属性表关联
这两天遇到一个不太容易解决的问题。
某燃气公司想自己对自建管线进行测绘便于数字化管理,在接受了简单的RTK测量培训和Cass成图培训后,就自己着手开干。
最近数据整理的差不多了,就提交给我请我帮忙核查下是否可用。
拿到数据后,发现几个问题:
1. 成图的数据并没有在CASS中完成空间对象编码的赋值
2. 所整理的属性表(Xls)可能有大量的不规范甚至不全。
这份数据可以用于绘制一个基本的管网分布地图,但是却难以用于空间数据管理和分析。
根本原因在于,图(空间数据)和属性没有成功建立联系。 这也是我认为某地经信委请来的团队极度不靠谱的原因,因为数据表结构是对方要求,而对于管线,其结构中没有体现唯一性的字段。
其实到这时感觉是比较麻烦的,因为建立空间关联向来都是GIS数据处理中的大问题。如果是定点还容易,特定坐标系统下的坐标+高程能够基本确定唯一,但是对于线和面对象就复杂了。
不过出于程序员偷懒的本性,还是不希望去和对方讲你们重做一遍这样的话,毕竟上万个点的重来还是很大的工作量。那么思考开始。
首先,已经完成且看上去质量不错的数据有 管线CAD数据,管线属性表,管线点属性表三份。
因为测绘是由点成线,由线成面的过程,所以点数据一定是包含全部线折点信息的。【此处说明一下,对方是提供了可用的点CAD的,但是没有列在可用里是因为该数据可以直接通过点属性以坐标展开得到。】
即是说,将管线上的关键点(折点)提取出来加以筛选,这个结一定和展点结果有空间上一一对应。
再看管线属性表上,有几个字段可以重点关注: 起始点号、终止点号、管线长度。
那么直觉告诉我,利用对起止点号的关联,应该就能够完成整个匹配工作。所以接下来的目标非常明确,提取出正确的管线起止点号。
显然,直接用线转点得到的点是没有点号信息的(因为该数据来自线数据,而线数据没有关联属性),但是关键点必须要有。 所以第一步,使用 ArcToolBox/DATa management/Feature/ Feature vertical to Point 工具提取每段管线的起止点。
【PS: 前期特别交代过,连线时必须连接成多段线而不是线段,所以这里起止点的提取才是有效的】
接下来就是怎样将这些起止点的信息匹配到位。 GIS之所以改变数据处理的方式就在于,通过为各种平面数据增加一个地理基准维度,使得这些(具备地理信息属性的)平面数据能够产生更多的关联。 前文分析过,起止点一定是全部点数据的子集,所以这里直接使用Spatial Join,实现基于空间位置的唯一关联。
当然,因为Spatial Join的算法会考虑各个点之间的最短距离/最小中误差等几种情况,以实现一个容差内的空间捕捉,所以直接得到的数据结果中可以发现存在一个 Join源点对应多个匹配点的情况。好在ArcMap非常贴心的为这个Join的结果属性表中增加了Distance字段,根据它进行排除。 比如,在我的例子中,两个点图层上的点必然是一一唯一空间对应的,那么全部可保留的数据的Distance值只能是0. 而在一些复杂的拓扑情况下,因为数据精度、坐标系转换参数等的问题,可能需要一个容差值,那么此时的Distance中就不一定全是0了。
得到这一步的结果,就相当于我对计算区内全部的起止点完成了属性值的匹配。那么这里得到最关键的信息其实就是点号。
根据前边的介绍,点号是用来建立点和线关联的字段。所以接下来的问题是,怎样确保我知道起止点分别是哪个。
到这是真的犯难了,因为第一次做的思路和这里写差不多,不过是起点和止点分开匹配,然后再对结果求交集,于是仅仅得到一条数据。经过分析发现,对方很可能在连线时没有意识的去按照真实的管线流向进行连接,所以这里的起止点并不明确。
到这一步,开始打算是对起止点两个字段进行模糊匹配,比如管线表中指定: 起点号 001001,末点为001134,那么我在目前得到的数据中匹配,只要两个字段分别包含这两个点号,就认定匹配。 这个思路应该是没有问题的,但是实践起来不太容易。如果读者有兴趣,可以自己尝试下?
好在对方的偷懒给我省下了很多事。对方表示大部分的起止点规则都是起点<止点。那么事情就很简单了。
我将起止点结果数据导出一份,再对管线数据进行一次空间连接,这样就相当于管线数据也有了带点号的起止点信息。接下来,对这个属性表分析:
因为直接提取的起止点采用的策略是 Both Ends,所以实际上在得到的起止点表里是两行数据对应一条线。而另一个关键字段是ORIG_FID,即源FeatureID,是管线数据自己的空间对象ID。所以只要确保ORIG_FID是一样的,这两个点就是对应的这条管线的起止点。那么接下来的处理可以交给Excel解决,两行一条线,我就利用Excel的列排序功能直接得到两列按ORIG_FID分组、再按点号升序、降序的点号数据,如下:
--------------------------------------------
ORIG_FID 起始点号 终止点号
--------------------------------------------
10 0010124 0010225
--------------------------------------------
10 0010225 0010124
————————————————————
让Excel以ORIG_FID列为准,去除重复行就能得到满足起始点号小于终止点号的结果。
最后再将这个数据表与管线数据进行Join(Table Join即可),ORIG_FID作为关联字段,就能得到带有起止点信息的管线空间数据。此时,再对管线属性表进行关联,关联字段为起始点号,就能完成整个基于空间关系的匹配工作。
PS:
特别提醒,以这个方法完成关联的前提是,能够正确提取线的起止点,点、线属性表数据记录数量必须与空间数据的要素数量一致,否则匹配结果会有误。
总体来说,这个流程是面向特定的情况设计实践的,但是数据处理过程中应该更准确的抓住问题,才能考虑出解决核心问题的方案。
【GIS数据处理】 利用空间关系建立线CAD数据和属性表关联的更多相关文章
- Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)
Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...
- 基于ArcGIS的CAD数据向GIS数据转换方法(转)
基于ArcGIS的CAD数据向GIS数据转换方法 1 CAD数据与ArcGIS数据介绍 地图数据来源多种多样,大多数使用的是计算机辅助设计软件(CAD)制作的数据,CAD软件制图自动化程度高,操作简单 ...
- GIS案例学习笔记-CAD数据分层导入现有模板实例教程
GIS案例学习笔记-CAD数据分层导入现有模板实例教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 1. 原始数据: CAD数据 目标模板 2. 任务:分5个图层 ...
- GIS专业书籍、文档、数据、网站、工具等干货
整理.分享一些个人整理的GIS专业书籍.文档.数据.网站.工具等.也希望大家将自己的心得也分享出来,一起交流,共同进步. 如果下载链接失效,请到这里去:地信网 一.原理应用类 GIS基础类 01.地理 ...
- FME之于规划CAD数据质量检测
最近琢磨规划CAD数据转换入库GIS方面的技术问题,看过一些前辈的文章/文献,对于使用FME WorkBench方面,有了一些了解,往往直接转换数据丢失比较严重,而且GIS对图形属性和空间拓扑比较严格 ...
- 利用python进行数据分析之数据规整化
数据分析和建模大部分时间都用在数据准备上,数据的准备过程包括:加载,清理,转换与重塑. 合并数据集 pandas对象中的数据可以通过一些内置方法来进行合并: pandas.merge可根据一个或多个键 ...
- 利用TPC-H为MYSQL生成数据
## 利用TPC-H为MYSQL生成数据 导言 这篇文章是看了joyee写的TPC-H数据导入MySQL教程以及另一篇网上的MySQL TPCH测试工具简要手册 后写的,有些内容是完全转载自以上两篇文 ...
- 使用ArcGIS Runtime 100 进行本地GIS数据处理的注意事项
如下图所示,如果需要使用ArcGIS Runtime 100 进行本地GIS数据处理,则需要依赖Local Server通过发布GP服务实现. 一.ArcGIS Runtime所使用的GPK是有版本限 ...
- MSSQL · 最佳实践 · 利用文件组实现冷热数据隔离备份方案
文件组的基本知识点介绍完毕后,根据场景引入中的内容,我们将利用SQL Server文件组技术来实现冷热数据隔离备份的方案设计介绍如下. 设计分析 由于payment数据库过大,超过10TB,单次全量备 ...
随机推荐
- PY个欧拉筛
大数据用 python? 速度感人 突然来了一发 python 欧拉筛,调了半天之后输入 1e7 过了几秒钟之后出解了,PY 果然神速 没学过 PY 的小同学可以当做 VB 的阅读程序,反正语言隔离都 ...
- 如何遍历div里面的文本内容,用each方法,
如何遍历div里面的文本内容,然后进行匹配传来的数据,进行选中div,并进行CSS样式处理, for(i = 0; i< $(".itemMenuRowBox").child ...
- MySQL---数据库切分
3.切分 水平切分 水平切分又称为sharding,它是将同一个表的记录拆分到多个结构相同的表中.当一个表的数据不断的增加的时候,sharding是必然的选择,它可以将数据分布到集群的不同节点上, ...
- 微信小程序css篇----flex模型
一.Flex布局是什么? Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. .box{displ ...
- 34. Find First and Last Position of Element in Sorted Array (JAVA)
Given an array of integers nums sorted in ascending order, find the starting and ending position of ...
- NSPredicate的使用,超级强大
NSPredicate *ca = [NSPredicate predicateWithFormat:(NSString *), ...]; Format: (1)比较运算符>,<,==, ...
- Docker 启动与停止容器
启动已运行过的容器 docker start 容器名称|容器id 如: docker start mycentos 启动所有运行过的容器(注意:反单引号` `), docker ps -a -q 是查 ...
- 【前端】DOM操作
1 什么是DOM 全称 Document Object Model 文档对象模型. 一个web页面的展示,是由html标签组合成的一个页面,dom对象实际就是将html标签转换成了一个文档对象.可以通 ...
- button标签设置line-height问题
默认设置line-height是不会有问题的. 加了边框后就会出现问题. 如果想要解决的话.就调整行高,自己满意为止.
- pycharm快捷键的使用、内存管理、变量、数据类型、注释相关笔记
目录 pycharm快捷键的使用 变量 python内存管理 小整数池 引用计数 垃圾回收机制 循环引用 变量的三种打印形式 数字类型 字符串 注释 pycharm快捷键的使用 ctrl+c复制,默认 ...