2018FME博客大赛-基于FME的不同比例尺线面要素 一致性检测关键技术研究

编  写:曹 文 涛

武汉市测绘研究院

二○一八年三月

  • 概述

随着地理信息系统技术的不断发展和广泛应用,各省市国土测绘部门都纷纷建立起了各种比例尺的基础地理信息数据库,其提供的矢量地理数据为社会各行业的发展起到了举足轻重的作用。但是,国民经济和社会的迅猛发展促进了城市快速扩张,使得各类地形要素的变化日新月异,从而导致各种矢量空间数据与空间实体现状之间不符的矛盾日益突出。在具体的实践生产应用中,往往会遇到在同一地区不同比例尺的地图数据间互相矛盾的情况,在考虑数据时效性的前提下,如何能够方便、快捷地实现不同比例尺数据间的协同更新,其中最关键的一个环节是在同一地区不同比例尺的地图数据中搜寻表达地表同一地物的地图要素,即目标匹配,这也是空间数据采集、集成和更新的核心技术之一。目标匹配是指通过对目标的几何、拓扑和语义进行相似性度量,识别出同一地区不同矢量数据源中的同一地物,从而建立两个矢量数据源中同名目标间的联系,为进一步探测不同矢量数据源之间的差异或变化奠定基础。通过目标匹配对多源矢量数据或不同比例尺的地图数据进行一致性检测,这对矢量空间数据增量更新、地图数据库质量评价及矢量空间数据集成或合并具有十分重要的实践意义。

FME最为出色的不仅在于可以实现多种数据源间的互通流动,而且其在矢量数据处理方面有着强大、有效和便捷的空间拓扑运算分析能力,这就为利用FME进行矢量数据间的一致性检测奠定了坚实的技术基础,本文以矢量空间数据中的DLG线面要素为数据样例,从尺度方面对FME进行不同比例尺DLG线面要素一致性检测进行探讨。

  • 一致性检测评价规则

在具体深入地展开一致性检测内容之前,首先必须要搞清楚做一致性检测是如何去界定各种检测结果,是一致还是不一致,如果不一致,是新增还是缩短,是属性变化还是聚合等,没有一个清晰明确的标准去判别各种检测结果,那么一致性检测就失去了理论基础。一致性检测评价规则设计的着眼点需要从DLG要素的特性出发,继而制定变化规则和定义适配的变化类型,才能形成完整的评价规则体系。

一般来说,对于具有属性信息的二维DLG数据,对其本身与其他地理要素之间的关系进行全方位的描述时,需要从空间位置、几何形状、拓扑关系和要素属性等四个方面来考虑;同时,判定规则也需要从这四个方面进行制定,通过制定判定规则,就有了判别是否发生变化的标准,那么如何利用这个规则标准表述不同的矢量地理要素变化情况发生了何种变化,就需要通过量化的参数来进行。量化的指标参数也需要和判定规则相符合,即从矢量地理要素的四个方面特征进行量化,具体表现为空间相似度、几何相似度、拓扑相似度和语义相似度。通过计算这些指标参数值,配合制定的判定规则,就可以直接判别具体的变化类型,从而达到一致性检测的目的。

  • 不同比例尺DLG线面要素一致性检测

考虑到篇幅问题,这里就不对不同比例尺DLG线面要素的一致性检测规则体系设计、指标参数的设计和量化过程以及评价体系设计作过多的文字说明,如图1所示为不同比例尺DLG线面要素一致性检测的技术流程图。

从图1中可以看出,为了描述DLG线面要素的一致性检测情况,共定义了4个相似度参数,分别是空间相似度S(A,B)、几何相似度G(A,B)、拓扑相似度T(A,B)和语义相似度sem(A,B),并根据这四个参数的权重配置计算匹配要素间的要素相似度ObjSim(A,B),根据要素相似度阈值来界定目标匹配对间的相似情况,从而根据不同的匹配类型和一致性检测评价规则来判断一致性检测的结果。

本文将从空间位置、几何形状、拓扑关系和要素属性四个方面具体阐述不同比例尺DLG线面要素的一致性检测。

3.1 空间位置分析

由于同一地物要素在不同比例尺的DLG中表现形式可能不同,比如在较大的比例尺DLG中表示双线河流,而在较小的比例尺DLG中表示单线河流。因此,线面要素之间的空间位置关系描述可以通过获取线要素的缓冲区,然后与面要素进行空间叠加,计算面积重叠度,即待匹配线要素的缓冲区和面要素的相交区域面积与二者本身面积中较大的面积值的比值,从而进行线面要素间目标匹配候选集的建立。在FME中计算缓冲区和面要素面积值的转换器分别为Buffer和AreaCalculator,如图2所示:

扫描二维码关注公众号,回复: 12660951 查看本文章

图1不同比例尺DLG线面要素一致性检测流程图

图2线要素缓冲区及面积值计算

这两个转换器虽然简单,但是有一点需要注意的是,为了提高FME模板的通用性和灵活性,一些参数的设置最好采用FME Parameters的方式,可以由用户在使用时方便配置。既然要计算面积重叠度,就必须要计算出线的缓冲区与面要素之间的重叠区域面积,这里就用到了AreaOnAreaOverlayer、Tester和AreaCalculator,如图3所示:

图3重叠区域面积计算

通过AreaOnAreaOverlayer进行面面叠加分析,为了提高运算效率可以在GroupBy参数值进行相应设置;在Tester中利用参数_overlaps的值来判断过滤相交区域的面要素;最后利用AreaCalculator计算其面积值。

面积重叠度是一个彼此相对的计算过程,线要素可以用来建立其候选匹配集合,该集合中都是面要素;面要素也可以用来建立候选匹配集,该集合中都是线要素。面积重叠度计算完毕之后,根据给定的阈值,当面积重叠度大于阈值时,线(面)被纳入面(线)要素的匹配候选集,认为未在空间位置上发生变化;当小于阈值且大于0时,则认为在空间位置上发生了变化,即位移;当等于0时,则认为线或面要素发生了“新增”或“删除”现象。

其实计算面积重叠度还是很简单的,都是常用的转换器,学了FME也有几年时间了,自己的体会就是把常用的几十个转换器用活、用透,就能做很多的数据处理工作。

3.2 几何形状分析

线与面要素进行目标匹配时,在几何特征方面,目前主要考虑长度特征,获取线与面要素匹配集中面要素的中轴线长度之和,计算匹配集中线要素长度与面要素中轴线长度之和的差异。线与面要素匹配情况一般发生在线要素为较小比例尺地形图中的要素且面要素为较大比例尺地形图中的要素。

由图1可以看出,在不同的匹配模式下,对不同的长度参数变量值之间的比较才会导致不同的一致性检测结果,而几何相似度的计算可以理解为线面要素匹配集中,线要素与面要素中轴线长度之差与二者中较大长度值的比值,该值与1差值的绝对值即为几何相似度。在这部分分析过程中,主要用到了CenterLineReplacer、LengthCalculator、FeatureMerger和SpatialRelator等转换器。

计算面要素中轴线的转换器就是CenterLineReplacer,在参数中设置模式为“Medial Axis”,如下图所示:

图4面要素中轴线提取

对面要素中轴线提取后,直接用LengthCalculator去计算中轴线要素的值,在这个过程中,我们其实只需要中轴线的长度值信息,并不需要中轴线的几何要素,所以就遇到了一个在矢量数据处理中经常碰到了图属挂接问题,这个就需要用到FeatureMerger转换器了,在利用GeometryRemover转换器将中轴线几何实体删去后,进行图属挂接,如下图所示:

图5 FeatureMerger图属挂接

图6 中轴线长度计算及属性挂接

在进行图属挂接时,首先保证属于同一个面要素ID实体,其次考虑到只保留了中轴线属性信息,所以挂接的模式选择只针对属性挂接,这样在面要素的属性列表中就会有中轴线长度的属性信息了。

接下来就是对线和面要素进行空间叠加分析,本文采用的是SpatialRelator转换器而并非LineOnAreaOverLayer,原因在于前者中有一个可以利用的参数,能够提高空间分析的效率,如图7所示:

图7 SpatialRelator转换器设置

图8 目标匹配候选集建立

图9 反向目标匹配候选集建立

由于线和面要素分属两个不同的数据源,在模板中将flag创建为数据源标识字段,利用SpatialRelator转换器中的“Attributes that Must Differ”,可以有效地将两种数据源分开,避免同一数据源中的相关要素进行不必要的空间分析运算,降低模板运行效率;进行线面叠加,需要同时考虑到“Contains Within Intersects”这3种情况,并将相应的匹配要素以List的方式存储起来,方便进行后期的运算,当然,和List有关的转换器也会多次用到,比如ListSorter、ListSummer和ListExploder等,这和C++和C#系列的面向对象语言中的数组概念类似,它的存在可以在空间分析中多次将属性进行重新分配,能够灵活的运用List,也是精简模板的好途径;这里再次用到了Group By,用以过滤掉多余无用的要素进行空间分析。由此可见,同样的问题在FME中有很多种解决方式和转换器使用方法,但是无论采取哪种解决方案,在保证有效解决问题的前提下,提高模板运行效率才是重中之重。

对几何相似度的计算,主要的转换器使用基本就是这些,由于不同的匹配模式下,根据几何相似度的计算结果,评价检测的结果有所不同,所以这里就不再具体阐述其中的过程了,归纳起来就是“几何变化”、“新增”、“删除”等。

3.3 拓扑关系分析

线与面要素的拓扑关系是在待匹配候选集中的线要素构建缓冲区之后,定义线要素缓冲区与待匹配候选集中面要素之间的拓扑距离,即相接或相交为1,相离为2,单要素为0。用tdA,B

来表示源数据中的线要素缓冲区A和目标数据中的匹配候选面要素B之间的拓扑差异,也就是二者之间拓扑距离,如果是两个数据集之间的拓扑差异,即两个数据集之间拓扑距离的和。θ

为经验参数,拓扑相似度的计算与θ 和tdA,B 有关,这里就可以用到上一小节中的空间分析结果,对拓扑距离进行赋值,从而计算拓扑相似度,用来表征线与面要素之间的拓扑关系变化。

3.4 语义属性分析

结合DLG数据本身特点,定义能够表征线和面要素实体的属性字段,暂且定义为“要素名称”,一般来说线与面要素之间的匹配是同一地物在较大比例尺DLG中的依比例尺面要素与较小比例尺DLG中的不依比例尺线要素之间的匹配,因此,二者的要素名称必定有相似的部分,再者不同的DLG数据组织方式不同,在要素编码上也会有体现,比如属于一个大类,只是小类编码不同,本文以要素名称为例,对语义属性的相似度进行分析。

那么在模板中具体是利用Levenshtein距离算法,也叫做字符串编辑距离算法,是一种计算两个字符串间的差异程度的字符串度量。我们可以认为Levenshtein距离就是从一个字符串修改到另一个字符串时,其中编辑单个字符(比如修改、插入、删除)所需要的最少次数。将Levenshtein距离算法的Python代码添加到转换器PythonCaller中,如下图所示:

图10 PythonCaller转换器引用Levenshtein距离算法

图11 要素相似度计算与检测结果分类

利用以上算法将要素名称之间的相似情况量化为语义相似度,计算出语义相似度值,即可表征语义属性的相似程度,然后可综合空间相似度、几何相似度和拓扑相似度的权重配比,如图12所示,对匹配集中的要素进行要素相似度计算,从而选取相似度最佳匹配要素。

图12 要素相似度计算

  • 程序测试

第三节中主要讲了一致性检测每个方面的主要思路,接下来就谈一下在模板进行测试运行时的一些情况。

4.1 多参数权重分配

在进行目标匹配时,是根据要素相似度参数值进行量化指标选取的,而其值与空间相似度、几何相似度、拓扑相似度以及语义相似度均有关系,这4个参数的加权平均值即为要素相似度。因此,对于不同的权重分配,会得到不同的要素相似度值,从而获取不同的最佳目标匹配要素。所以在进行模板测试时,需要根据不同比例尺DLG图形中的实际差异情况,结合不同权重分配得到的一致性检测结果,经过多次的测试和验证,得到与实际图形情况相符效果最好的一组权重分配取值,如下图所示:

图13 不同权重分配测试表

当然,模板中的参数不止这4种相似度,还包括缓冲区半径和几个阈值,每个参数在程序运行时,都需要经过大量的数据测试,才能得到一致性检测结果较好的经验值,所以,在参数值的选择上,并不是随意设置,必须考虑到不同比例尺DLG的实际特性与差异情况。这里与以往我们解决问题的方向有些不同,实际上我们是无法得到与现实差异情况完全一致的那组经验参数值,因为在解决问题的过程中,没有那么多“1+1=2”的情况发生,更多时候我们只是去尽可能的接近想要的目标值和效果,这也就世界上为什么还有误差这个概念的存在了。

4.2 检测结果输出形式

本文测试的不同比例尺DLG数据是dwg格式的,因此在输出时,根据不同的检测结果以其类型命名结果文件,如下图所示:

图14 线要素延长或缩短输出模块

图15 线面要素一致性检测dwg结果输出

这样的结果输出是一种常规模式的输出,基本上到这一步,整个一致性检测的流程就结束了,但是如果仅仅把不同比例尺线面要素的一致性检测作为一个小的功能模块,放大一步到不同比例尺矢量地理要素的一致性检测,再放大到多源多尺度多时序矢量地理要素的一致性检测,那么将这个课题封装为一个一致性检测系统平台,其检测结果就需要具备一定的通用性和可标记性。事实上,笔者正在进行的研究就是集多源、多尺度和多时序于一体的一致性检测关键技术研究,本文只是就某一个方面展开论述,考虑到通用性的可标记性语言,就可以将输出结果改为XML文件。

XML文件是每次一致性检测生成的结果文件,它不仅需要包含对本次变化检测整体的情况描述,而且还需要对所发生的具体变化进行记录。因此,XML文件的内容结构主要分为头文件(Header)和变化信息记录(ChangeRecords)两个部分。

头文件是对本次一致性检测结果的整体概述,需要包含一致性检测的时间、数据源、变化类型、变化总数等信息;变化信息记录则记录了每一个要素对应的变化信息,包括要素GUID和DiffID,前者是表征每一个要素的唯一标识码;后者则是涵盖了时间、数据源编码和一致性检测结果类型编码等信息,对于数据源编码和一致性检测结果类型编码的设计和结构这里就不再展开叙述。以下为一致性检测结果变换为XML文件的模块:

图16 一致性检测结果XML文件输出模块

那么得到一致性检测结果XML文件如下图所示:

图17 一致性检测结果XML文件内容示例

在一致性检测系统平台生成的XML文件的应用就有多方面了,比如通过众包中转平台分发基本地形图的日常更新作业任务,在各作业终端解析XML文件,就可以有目的性地进行测绘生产任务,目前这一构想的后续平台也在研发过程中。

4.3 FME Server + AutoCAD

对矢量地理要素一致性检测的研究,着眼点在于实际的生产实践应用,那么在测绘地理信息行业,AutoCAD或者基于该软件进行二次开发的测绘生产系统则是日常作业生产的主流平台,如何能够将FME与日常生产作业平台有效地结合,是必须要考虑的问题。

通常情况下,将每台电脑安装FME Desktop运行fmw模板,这是我们利用FME进行数据处理的常规操作,但这就要求每个作业员安装软件,在实际的生产应用中,有些不便。考虑到一般的生产作业平台均在局域内网、政务内网等非外网环境工作,因此,为了摆脱在每台工作机上安装FME Desktop的束缚,同时又能够在日常的生产作业平台中嵌入矢量地理要素的一致性检测功能,笔者就将FME Server和AutoCAD结合起来,以线面一致性检测为例,主要思路如下:

(1)将线面一致性检测fmw模板发布至局域内网等非外网环境中部署的FME Server;

图18线面一致性检测fmw模板

图19 FME Server服务发布

图20 FME Server已发布模板界面

(2)通过FME Objects开发组件,在C#编程环境下对(1)中发布至FME Server的Service进行底层调用;

图21 FME Server服务后台调用

(3)调用AutoCAD二次开发接口,在同一C#工程中,集成(2)中FME Server的Service调用代码,开发测绘生产作业平台可直接以AutoCAD命令形式调用的功能函数;

图22 AutoCAD二次开发集成调用FME Server服务功能

(4)在测绘生产作业平台执行(3)中开发的命令功能函数,直接调用线面一致性检测Service。

图23 生产作业平台调用FME Server服务实现结果本地下载

检测结果下载到本地之后,可以解压打开dwg类型的结果文件,从中选取一处线面不一致的情况作简要说明。测试数据采用1:500和1:2000比例尺的DLG数据,如下图所示:

图24 1:500DLG数据

图25 1:2000DLG数据

在图24和图25中,分别选取了面状要素花圃和线状要素花坛,如图中红色箭头所示,经过线面要素一致性检测,其检测结果如下:

图26 面要素花圃检测结果类型“散裂”

图27 线要素花坛检测结果类型“聚合”

在图26和27中,为了对比明显,将花圃面要素颜色改为红色,其图层名以检测结果类型命名,为散裂;花坛线要素为绿色,其图层名以检测结果类型命名,为“聚合”。这与图24和图25中的实际差异情况相符,在1:500的大比例尺DLG中,3个花圃面要素分别进行绘制;而在1:2000比例尺DLG,考虑到图面表达等因素,仅为1个花坛线要素,而花圃与花坛仅仅是因为比例尺不同,表达方法和对象不一致造成的制图对象化不同,所以由3个花圃变为1个花坛,视为“聚合”,由1个花坛变为3个花圃,视为“散裂”。因此,一致性检验的结果还是较好地反映了不同比例尺DLG数据之间的差异性变化。

通过“FME Server + AutoCAD”的模式,只需要保证网络互通的情况下,就可以在日常的生产作业平台去调用FME Server上已发布的一致性检测服务,并将一致性检测结果下载到本地路径,不仅不需要每个网络终端安装FME Desktop,而且也能够保证生产作业平台的有效利用,实现跨平台的数据处理功能互通。

所以,FME Server的优势不仅仅在于我们耳熟能详的海量数据多引擎并发处理,针对网络的互通性能和其本身的服务开发接口,同样能够将其使用价值大大提升,从打破数据格式壁垒进行数据互通,到实现数据处理功能的跨平台互通,这也算是笔者对于FME Server应用的一点探索了。当然,前面提到的XML文件也可以在生产作业平台解析和展示,这主要涉及到AutoCAD的二次开发过程了,因此便不再这里赘述。

  • 结语

对于矢量地理要素的一致性检测研究,有很多不同的方法,但是具体到实际开发,应该以需求应用为导向,并且结合矢量地理要素本身的特点,针对性地进行研究,作为一个FMEer,更大程度地去运用FME,拓宽实践的视野,才能更好地为实际工作带来便捷和优势。本文以DLG线面数据为数据样例,将其一致性检测的主要流程、测试过程和应用思路做了简要介绍,最终的检测结果与实际地图数据的差异情况吻合效果较好,笔者能力有限,文中很多地方可能有错误和不足,欢迎有兴趣的同志们指导和交流。

猜你喜欢

转载自blog.csdn.net/fmechina/article/details/113654513