【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,单次全量备 ...
随机推荐
- 通过编写串口助手工具学习MFC过程——(四)添加ComboBox组合框
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- Vue 中如何定义全局的变量和常量
Vue 中如何定义全局的变量和常量 我想要定义一个变量, 在项目的任何地方都可以访问到, 不需要每一次使用的时候, 都引入. 尝试1:创建 global.js 并且在其中定义 let a = 10 ...
- C#批量将数据插入SQLServer数据库
Database db = CreateDatabase(); var varConnnection = db.CreateConnection(); //获取连 ...
- MySQL索引优化与分析(重要)
建表SQL CREATE TABLE staffs ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (24) NULL DEFAULT '' COM ...
- MongoDB入门_MongoDB特色
1. sql数据库与nosql数据库对比 nosql不支持实时一致性转而支持数据的最终一致性,数据有一定的延迟 redis数据库支持部分事物,而mongodb不支持事物 nosql数据库没有多表联查功 ...
- ztree点击加号+触发ajax请求
之前做的时候一直是点击节点才触发ajax事件,配置如下:发现点击节点前面的“+”没有反应,后来发现,应该添加一个折叠的事件. onExpand:zTreeOnClick事件和onClick的一样. v ...
- DDD领域驱动设计初探(二):仓储Repository(上)
前言:上篇介绍了DDD设计Demo里面的聚合划分以及实体和聚合根的设计,这章继续来说说DDD里面最具争议的话题之一的仓储Repository,为什么Repository会有这么大的争议,博主认为主要原 ...
- python如何导入自定义文件和模块$PYTHONHOME$\Lib\site-packages 方法
python 中如何引用自己创建的源文件(*.py)呢? 也就是所谓的模块. 假如,你有一个自定义的源文件,文件名:saySomething.py .里面有个函数,函数名:sayHello.如下图: ...
- 【华容道】题解(NOIP2013提高组day2)
分析 这道题很容易想到令f[x][y][x1][y1]表示空白块在(x,y).指定棋子在(x1,y1)时的最少步数,让空白块和四周的棋子交换,当空白块要和指定棋子交换时,把指定棋子移动,搞一下BFS就 ...
- linux运维、架构之路-MySQL(一)
一.数据库管理系统 1.RDBMS关系型数据库特点 ①二维表 ②典型产品Oracle传统企业,MySQL是互联网企业产品 ③数据存取通过SQL ④最大的特点,数据安全性很强(ACID) 2.NoSQL ...