基于FME的河流、道路等长面状地物要素的中心线提取

作者:凡江林   QQ:564438737

课题背景

在地图制图工作中,经常会遇到需要把大比例尺面状地物综合成小比例尺线状地物;或者是不同的专题地图中,由于侧重点不一样,也会把一部分面状地物综合成线状地物。而随着电子地图以及GIS系统在交通、电力、水利等各个行业的深入渗透,面状地物提取中心线也成为各行业GIS从业者日常GIS数据处理的一部分。

(一)问题描述

面状要素的中心线提取,源于开发一个GIS平台的工作底图,需要处理全省的河网数据。在矢量化大比例面状要素后,需要在小比例尺度下显示线状要素。同时要求较高的精度,很自然的想到提取面状要素的中心线。当然,提取面状地物的中心线,可以利用arcgis,也可以利用fme。本文介绍基于FME的河流、道路等长面状地物要素的中心线提取。

(二)流程思路

在FME中,转换器CenterLineReplacer能够把面状要素转换成线状要素,如图(1)所示。

基于FME的河流、道路等长面状地物要素的中心线提取

图(1)


但是,该转换器转换的结果并不是最终我们想要的结果,在面域不均匀的情况下,会有很多琐碎的小分支,如图(2)所示。

基于FME的河流、道路等长面状地物要素的中心线提取

图(2)

并且,利用转换器CenterLineReplacer把面转成线的过程非常耗时。所以,可以考虑分两步。(1)把面状地物通过转换器CenterLineReplacer转换成线状地物;(2)对线状地物进行处理。

要对以上的河网数据进行处理。首先需要理清思路。应该如何删除掉多余的悬挂线段呢。我们假定了河源和汇口后,最终要的就是保留从河源到汇口的这条河流主干道,删除掉其余的支流。如图(3)所示。删除掉了第一层悬挂线段,还有第二层悬挂线段。那么,删除悬挂线段,这是一个递归的过程。直到没有了悬挂线段了为止。

基于FME的河流、道路等长面状地物要素的中心线提取

图(3)

在arcgis中,我们基于转换器CenterLineReplacer处理的结果,创建河网需要保留的源头以及汇口,一起放在一个点要素里面,连同转换生成的线作为输入,如图(4)所示。

基于FME的河流、道路等长面状地物要素的中心线提取

图(4)

以下是利用FME开发的整个流程图,如图(5)所示。

基于FME的河流、道路等长面状地物要素的中心线提取

图(5)


最终运行结果,如图(6)所示。

基于FME的河流、道路等长面状地物要素的中心线提取

图(6)


现在,来说一下图(5)的实现流程。在图(5)中,利用Deaggregator实现聚合线的分解。利用自定义转换器fjlRemoveBranches实现删除掉河网支流悬挂点的功能。在该自定义转换器中,利用了循环递归的思路。在该自定义转换器的输出结果中,利用GeometryFilter实现河源与汇口同河流的分离。通过LineCombiner对实现河流段的连接。连接后,计算各段的长度。通过Tester进行长度过滤来清除掉0长度的细碎悬挂节点。再次利用LineCombiner_2实现对河流的连接,加入河流源头与汇口,运行后,即得到如图(6)所示的结果。

下面,对自定义转换器的实现细节进行简单的介绍。自定义转换器流程图如图(7)所示。


基于FME的河流、道路等长面状地物要素的中心线提取

图(7)


图(7)中已经标记相关转换器的功能。在此简单的进行介绍。首先获取线段的所有节点,然后与线段空间叠加,根据叠加的线段数量计数。获取悬挂节点;通过悬挂节点,利用空间叠加,获取悬挂线段;过滤掉第一层悬挂线段后,进行循环,继续下一轮判断,直到没有悬挂线段为止。

(三)探索结论

通过以上的分析,利用FME可以实现河流、道路等长面状地物要素的中心线提取。以上的方法是一种朴素的实现方法,没有利用网络分析的相关概念。仅仅从悬挂节点出发,通过自定义转换器,利用循环的方式,以及简单的空间关系,实现了基于FME的河流、道路等长面状地物要素的中心线提取。

这是一篇探索性的博文。后续将会深入研究ArcGIS、FME的网络的构建以及分析。以及通过FME里面的网络构建分析工具,实现更复杂的相关案例。

(限于作者的学识和经验,定有不少疏漏和不当之处,甚至是错误也在所难免,恳请读者和同行批准指正!)