路网自动构建路段拓扑 |
您所在的位置:网站首页 › 拓扑图用什么做 › 路网自动构建路段拓扑 |
背景
在做道路匹配的时候,你发现很多论文都是基于路网的拓扑关系做的,但是问题就是:如何构建路网的拓扑关系?一般的论文都已经在构建好拓扑关系的基础上直接拿来用,有些论文说是使用MapInfo、MapX等等工具生成拓扑关系(我没试过,但是好像也需要写代码)。 其实,在ArcGIS里面,稍稍研究一下,间接就能建立路段之间的拓扑关系了。 然而,在百度搜“ArcGIS建立拓扑”,多数都是拓扑关系的处理,比如批量消除伪节点、悬挂点等等(对路网数据的处理确实很好用),和本文主题说的路段拓扑关系构建不是一个概念。 补充 正文路段拓扑的定义:在路网数据中,使用"弧-结点"形式的数据结构来表示,弧段由两个端点定义:指示弧段起始位置的起始节点,指示弧段终止位置的终止节点。这被称为弧-结点拓扑。正是由于有这样的结构,只要路段收尾相连不断开,就能保证路网的连通性。 在ArcGIS里面,有一种用于存储矢量数据的地理相关数据模型,它叫:Coverage。当Coverage生成的时候,它就包括了节点(node)、弧段(arc)、tic文件。这就可以基于coverage的存储结构使用这些文件来进行路段拓扑的构建。 那么,为什么coverage可以做到呢?因为Coverage具有连通性、区域定义、邻接、生成拓扑的功能。我们看一张ArcGIS官方对Coverage的连通性描述: 从图片中可以看出,在交叉路口(相邻的边),边与边共享同一个结点。例如:路段1的起点ID是10,终点ID是11。路段2的起始ID是11,终点ID是12。则路段1.endID=路段2.startID。具有这种连通性拓扑结构的网络,才是我们需要的路段拓扑。 构建路段拓扑需要的准备: 首先,你得有一份路网数据。当然,一般的路网数据都是有各种问题的,这个需要我们处理,比如:路网的伪节点、悬挂点等等情况。 当你已经处理好了这样的数据了(即一条路以交叉路口为分界),如下图所示,你就可以开始构建路段拓扑了。 开始构路段建拓扑: 一、新建一个个人地理数据库,然后道路你的路网数据,然后建立集合网络。 二、路网数据导出Coverage格式 在你的个人地理数据库里面,右键你的路网数据–>导出–>转为Coverage。 到这一步,要把刚才的xxx_Junction一起选入。 四、arc弧段文件导出shp格式: 右键arc弧段文件–>导出 五、把arc弧段文件和原路网文件进行合并处理(重要的一步) ArcToolbox–>分析工具–>叠加分析–>相交
六、查看合并结果 经过对比分析,每条路段的起点ID、终点ID是一致的。并且,上一路段的终点ID等于下一路段的起点ID。 关于上面生成的道路节点,只需要记住:snode是数字化道路的起点,enode是数字化道路的终点,就可以了。 至于加入direction方向(可参考我另一篇博客:数字化方向)来判断之后,会显得很绕。但是大概的拓扑关系我都写在下图了。 连续整了好几天,终于整出来了。其实,我不是学地理信息专业的,但是有句话说得很好:念念不忘,必有回响。距离发表论文还是有段距离,写下来记录一下自己的成果吧。 现在论文被录了,这篇博客就可以放出来了~ 其实,在构建路段拓扑的时候,也有过A、B、C等等一系列的解决方案,都失败了,最后还是这个方案成功了。也说说其他方案的处理,或许能给其他人提供解决方案。 A方案:ArcGIS里面能提出每条路段的起始、终止节点。数据管理工具–>要素–>要素折点转点。但是提取出来的端点编号全部不一致,无法做到上一路段的终点ID等于下一路段的起点ID。 B方案:PostGreSQL数据库里面,有一个交Pgrouting的内置处理命令可以对路网数据自动构建拓扑,具体命令如下所示: select pgr_createTopology('wgs84testsegments',0.001, 'geom', 'gid');但是,我尝试过了用这个命令生成的拓扑结构,em…反正我单从表面逻辑上没看出来有什么道路的连通性。 C方案:由于之前我不知道有“相交”这个功能,我得到arc弧段文件后,使用python对文件进行处理。因为arc弧段文件和原路网文件实际上是一样的,只是记录的属性表不一样(即使是一样的,但是每个点的经纬度还是不一样,因为要具体到小数点后7位之后,只是肉眼看不出来,以为是一样的)。我把arc弧段的起点和终点的经纬度提取出来,和原路网文件的起点、终点的经纬度进行比较,如果一样,就把arc弧段文件的拓扑属性丢给原文件。这时候我发现,即使在ArcMap里面看起来一样的点,实际上小数点后7位之后的数字还是不一样。无果,放弃。 D方案:就是本文的方案,完美解决。 打完收工~ |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |