全茂林
(福建省测绘院,福建 福州 350003)
在现阶段生产作业过程中,因数据格式转换、投影变换等操作,生产的矢量数据会存在一些拓扑错误。常见的拓扑错误有面要素的缝隙、重叠和线要素的毛刺、伪结点、悬挂线等。此类拓扑错误往往很难通过肉眼发现,若单单依靠人工处理,将会耗费大量的时间,并且可能并不能完全消除此类错误。对此,借助相应功能的工具处理将是一个很好的选择。本文探讨的重点是如何设计制作一种能满足所需要求的工具,笔者提出一种利用FME工程数据处理模板和ArcGIS数据互操作拓展模块的方法来生成工具的方案。
FME(Feature Manipulate Engineering)是一个支持多元数据的提取、转换、加载、处理的强大工具,它是完整的空间ETL解决方案[1]。FME工具库中包含有400多种功能的转换器,通过这些转换器,可以实现数据的处理和转换。此类转换器可以单独使用,也可组合应用,组合应用的方式是通过制作模板进行的。其模板制作原理就是在FME工作空间(FME Workbench)中调用多种不同功能的转换器和输入输出模块,然后通过不同转换器的组合来实现各种功能。
FMEWorkbench模块是一个空间ETL(提取、转换和加载)创作环境,可快速定义图形化的流程,进行数据转换、变换和集成[2]。在FMEWorkbench可以完成栅格要素、几何要素等多种类型数据转换,也可进行图形、属性等数据的操作,它是一种用于开发数据变换工具的可视化工作流编辑器,在启用Data Interoperability扩展模块后,可以用该编辑器创建空间ETL工具[3],以用来配合其他软件使用,其具有强大的功能。
ArcGIS数据互操作(ArcGISData Interoperability)是由ESRI公司和Safe公司共同开发的一款扩展模块,它可以直接读取和使用100多种常见的GIS矢量数据格式,包括很多演化的GML规范。此外,可使用多种格式传送GIS数据[3]。其原理是通过空间ETL工具(Spatial ETL Tools)调用FME模板,使其能在ArcGIS中兼容使用FME功能,使数据操作方法多样化。使用空间ETL工具需另行安装,然后在ArcGIS软件中勾选自定义扩展模块的FMEExtension for ArcGIS选项。
本文进行矢量数据预处理工具的制作,首先要分析其所需功能,其次根据需求设计数据处理流程图,再次在FME工作空间中按照流程图制作运行模板,最后再在ArcGIS中引用制作拓展工具(ArcGIS ETL Tools),具体如下。
本工具的主要功能是处理矢量数据中的拓扑错误,其中拓扑错误包含缝隙、重叠、毛刺、伪结点、悬挂线等。这些拓扑错误的处理并不会相互影响,因此本工具的方案是对各个拓扑错误分步进行处理。
本工具要实现面状地物的缝隙、重叠处理和线状地物的毛刺、伪结点、悬挂线处理,并且其中悬挂线类型又分为线未达边、线超出边和端点不接3种情况,处理步骤如下。
对于面要素,分别处理面要素的缝隙和重叠错误,同时其另生成的辅助面用于后续线要素处理;对于线要素,分别对线要素进行断线连接、毛刺消除和去伪节点处理;最后对悬挂线的线未达边、线超出边和端点不接3种情况依次进行处理,其结果就是转换后的成果数据。具体流程如图1所示。
图1 模板设计流程图
流程图设计完成后,要在FME工作空间制作模板。FME的操作流程主要分为读模块、转化器模块和写模块3个部分[4]。具体为数据读入、面缝隙处理、辅助面线生成、毛刺消除、伪节点清理、悬挂线处理和数据输出。
2.3.1 数据读入
需用到数据输入模块,其中面要素和线要素要分开输入。因面状要素要用来处理压盖、缝隙问题和提取辅助面,其辅助面要提供给后续线状要素处理;而线状要素用来处理毛刺、伪节点和悬挂线问题,可以延后进行处理。
2.3.2 面缝隙和压盖处理
用到的转换器是AreaGapAndOverlapCleaner(面间隙和重叠处理),它通过使用指定的公差从输入区域构造二维平面分区来清除间隙和重叠[3]。为保持图形的主要特征,设置参数要以面积为标准优先权保留边。
2.3.3 辅助线、面生成
要得到辅助面要素和辅助线要素2组数据,首先提取辅助面用到Dissolver(融合)转换器,使之合并成融合面;之后提取辅助面边界线要素,因辅助面中还包含有空洞的情况,所以要用到DonutHoleExtractor(环、洞提取)和GeometryCoercer(几何类型转换,面转线)这2种转换器。
2.3.4 断线连接
对线图层,为防止对后续操作的干扰,先要进行断线连接处理,断线连接处理要分图层进行。首先建立记录图层的字段,然后使用Intersector(交叉点处理)和LineCombiner(线连接)转换器对其进行断线连接处理。
2.3.5 毛刺、伪节处理
毛刺消除用到SpikeRemover(毛刺消除)转换器,参数设置为最大尖锐角度为3、最大尖锐长度为10;伪结点处理用到Generalizer(泛化)转换器,设置算法为Thin(移除相邻线距离小于容差的点)。
2.3.6 悬挂线处理
悬挂线有3种类型,本文分3个步骤处理。
线未达边:思路是找出未达边的线,再让其延伸捕捉到临近边上。用到步骤2.3.3中生成的辅助线和要处理的线,然后用AnchoredSnapper(邻近捕捉)转换器进行捕捉处理,设置容差为30。
线超出边:分2种情况处理。线超出辅助面边界线,用步骤2.2.3生成的辅助面对其进行裁切处理,用到Clipper(裁剪)转换器;线自相交处超出边,用到提取判定的方法,具体步骤是先提取自相交超出的微短线,用到 Intersector(交叉点处理)和LineOnLineOverlayer(线线重合打断处理)转换器,然后用AttributeRangeFilter(属性值域判定)转换器判定长度属性进行筛选。最终FME模板如图2所示。
图2 FME模板成果
端点不接:用Snapper(节点捕捉)转换器进行处理。其原理是在容差范围内的临近端点不接处进行自动捕捉处理。为防止捕捉错误,笔者按照图层进行分组处理。
FME模板完成后,要将其在ArcGIS中实现,就要用到ArcGISETL模块。首先在ArcGIS中新建工具箱,然后创建FMEETL Tool,导入FME模板,最后生成ArcGISETL工具。
该工具完成后,为验证其可靠性,要对其进行测试:首先加载原始数据库process.mdb和成果数据库k1.mdb,然后点击执行,其图形处理前后对比效果如图3所示。
图3 执行前后图形对比
从图3中看出,元数据中超出面边界部分已裁除,图形中的要素也得到了简化,为更直观地显示出结果,对其数据前后指标进行统计对比,如图4所示。
图4 执行前后数据对比
由图4可知,记录由2 328条减为1 131条。本工具共清除毛刺3处,伪节点0处。悬挂线的3种情况为:端点不接94处,线超出边907处,线未达边0处。
在本次测试中,工具运行用时共35 s,而若随着处理的数据量增加,其运行时间将会成倍增长,因此对其优化是很有必要的。本工具的优化方案是在FME模板中设置使用CPU多核心并行处理,优化后用时减少到8 s,工作效率加快了77%。
FME具有多种功能的转换器,能够应对不同的功能需求,因此,在ArcGIS数据处理过程中,借助FME工具是十分有意义的,然而ArcGIS集成FME的功能还不够全面,现阶段还不能够交互设计处理模块。ArcGISETL扩展模块在数据处理工具制作方面还有很大的发展空间。
通过本文设计的矢量数据预处理工具,作业员只需对不同的项目修改FME模版,然后在ARCGIS中进行ETL配置即可生成相应的数据预处理工具。此方法可推广至需要矢量数据预处理的项目。如全国第三次土地调查、全要素更新、地理国情监测等,其具有很大的改进应用价值。