admin 管理员组

文章数量: 887006

2019FME博客大赛——FME在天地图数据融合属性整理中的应用

参赛单元:传统GIS数据处理

作者:余远剑

单位:福建省基础地理信息中心

 

1.应用背景

天地图是由国家、省、市三级节点构成的国家地理信息公共服务平台,而其中的数据融合已在国家测绘地理信息局的统一部署下成为一项每年常态化的基础性工作,形成了一套数据融合技术标准和数据规范。矢量数据融合对象包括水系、交通、居民地、境界、绿地以及地名、地址与兴趣点等。由于参与融合的数据源丰富多样,包括交通、导航、民政、公安等部门的专题数据,核心要素数据,大比例尺数据等,参考数据存在数据模型、结构、属性表达都不统一,甚至有些属性值混乱的问题,人工处理耗时费力且处理结果质量无法得到保证。因此,数据融合包括大量的属性标准化处理工作。为了提高“天地图·福建”数据融合效率和质量,保证提交的数据达到国家测绘地理信息局质检要求,需要能够快速、准确地对数据属性进行融合处理。

按照《天地图数据融合技术要求》,在实际的数据融合生产过程中,属性融合除了根据实体特点处理的特有图层属性外,还需处理所有图层共有属性规整问题。具体问题可以归纳总结为图元标识码生成、属性全角半角转换、属性空值标准化等三个方面。

  1. )图元标识码生成

图元标识码是每一个天地图矢量融合要素的唯一标识,属性必填项,是数据生产和检查过程中重要的关联查询字段。“天地图·福建”融合数据图元标识码共15位,由行政区划代码、比例尺代码和顺序码组成,如下图所示。为了便于数据关联和查询,顺序码不仅要代码唯一,还需在数据增、删、改中保持代码延续性。因此,图元标识码在全局唯一赋值的同时,还要满足补充生成。

 

2.)属性全角半角转换

属性全角半角转换主要包括两个方面:一方面,由于原始数据属性规范要求,或者数据属性更新过程中人为操作失误,导致融合的数据属性为全角格式。这些字段属性值需要统一全角转为半角格式。另一方面,天地图数据融合中,为了符合制图表达要求,需要一些字段属性值统一转为全角格式,例如道路层ROALN名称系列字段(Name,Name1,Name2……)的属性值,需要将像“G75”属性值转为全角格式“G70”,如下图所示。

 

3)属性空值标准化

天地图属性融合过程中,由于原始数据从数据库中导入导出,或者人工空值更新不当等原因导致属性空值表达各式各样,既有空字符串表述,也有NULL值表述,甚至还有些文字表述,如下表所示。这些属性空值需要按照天地图融合数据质检要求,统一标准化为“Null”类型。另外,在属性值前后都有空格类型,需要统一去除。

序号

空值表示

1

“”

2

“ ”

3

“  ”

4

“〈空〉”

5

Null

……

……

  2.基于FME的解决方案

根据天地图数据融合要求和实际数据生产情况,矢量数据空间几何关系融合处理完成后需对所有图层进行统一属性规整,包括图元标识码赋值、属性值全角半角转换、属性空值标准化等。由于属性规整的数据图层多,数据量大,因此数据处理程序不仅要实现属性融合规整,还要解决批量处理问题。从学校实习开始,接触认识FME已经有9个年头,FME作为功能强大的第三方数据处理可视化编程开发工具,已成功为国土、测绘、规划等多个行业提供数据格式转换、属性规整、空间分析与挖掘等数据处理解决方案。因此,融合项目利用FME对天地图数据属性融合处理程序设计与实现,设计方案如下:

   1)属性值全角半角转换处理

目前,FME暂时没有直接可用的字符半角全角转换器,但可通过调用其提供的“PythonCaller”转换器,编写Python代码完成字符间全角半角转换。Python是一种跨平台、开源的面向对象脚本语言,处理速度快、功能强大且简单易学。作为一种解释性语言,Python已经完全嵌入FME中作为一种功能扩展。通过计算全角半角字符之间对应Unicode差值实现属性值全角半角的转换。Python全角半角转换代码可以自己写,但网上有一大堆,这里就“拿来主义”,PythonCaller代码中只要写好需要转换的字段和代码,调用函数即可。字符串全角转半角函数代码如下图。

 

   2)空值统一映射为Null值

在FME Workbench中,导入融合图层进行属性值全角半角转换处理后,利用“AttributeTrimmer”转换器将所有属性值左右两侧空格去除。针对上述空值表述类型,FME为我们准备了功能强大的“NullAttributeMapper”转换器,这个转换器一方面提供了 “Empty”、“Missing”、“Null”空值映射设置,另一方面也可对具体属性值进行映射,这里还可以进行正则匹配具体属性值。最后映射的值可以是“Empty String”、“Missing”、“Null”空值类型,也可以重新赋上一个新属性值。这里就利用“NullAttributeMapper”转换器实现空值统一映射为Null值,具体参数设置如下图。通过正则匹配不同空值字符类型来实现类如“<空>”的空值表达(也可通过“StringReplacer”转换器实现)。属性正则匹配参数设置可灵活按照实际属性进行正则匹配。

 

3)生成图元标识码

在空值统一映射后,程序为每一个没有图元标识码的融合要素按照延续性生成图元标识码。如下流程图所示,为了满足图元标识码既能首次生成,也能后续延续补充生产,首先通过图元标识码字符长度和正则匹配行政区划代码分离并处理不规范图元标识码要素,然后根据现有图元标识码计算每个图层的顺序码最大值,接着提取出无标识码或者重复标识码要素,最后按照最大值继续生成要素顺序码,根据图元标识码规则组合形成要素唯一图元标识码。

                                                                              图3 图元标识码生成流程

在FME中,首先调用“Tester”转换器通过“@StringLength(@Value(ElEMID)) =15”和“BeginsWith=350”条件过滤出不规范图元标识码,利用”AttributeCreator”转换器对过滤要素ELEMID字段并赋上Null值。然后利用“SubstringExtractor”和“AttributeTrimmer”转换器按照图元标识码规则提取现有顺序码,通过“StatisticsCalculator”转换器分析计算现有顺序码最大值,注意要素输出端口选择Complete(完全),这样既能输出每个统计要素,还能获取统计要素中最大值,如下图。

 

接着利用“Tester”和“DulicateFilter”转换器分离出无标识码和重复标识码要素。将分离出的要素通过“StatisticsCalculator”转换器,分析“OBJECTID”(唯一字段即可)字段获取要素计数,注意要素输出端口选择Cumulative(累积),如下图所示,这样即可输出带1、2、3……计数值的无标识码和重复标识码要素。此处也可以使用“Counter”转换器来实现,通过设置Counter Name参数对多个图层无标识码和重复标识码要素分类批量计数,如下图。

 

注意:对于首次赋值图层,利用空值映射转换器“NULLAttributeMapper”将最大值字段空值或者缺失统一映射为0。最后利用“AttributeCreator”计算最大值与要素计数之和,即为新增顺序码,利用“StringFormatter”和“StringConcatenator”转换器按照代码规则组合形成新的图元标识码。按照最大值生成图元标识码程序模块如下图。

 

4)批量处理实现

在FME Workbench可视化编程环境中,通过合并导入的方式添加天地图融合数据集到读模块,然后依次添加上述属性值全角半角转换处理模块、属性空值标准化模块和图元标识码赋值模块。在“StatisticsCalculator”转换器中通过设置Group By为要素图层名称fme_feature_type进行分组统计。最后动态添加写模块,保存程序文件为.fmw格式,如下图所示。通过FME批量运行配置(Batch Deploy)即可启动数据的批量处理。

 

3.应用成效

通过FME开发设计的天地图数据属性融合程序实现属性融合的批量处理,并应用到2018年“天地图·福建”矢量数据融合处理中,验证技术方案的可行性和程序的可靠性。2018年“天地图·福建”矢量融合数据涉及14个图层,763万余条要素。最大数据量的居民地图层达454万余条要素。通过运行FME工程文件执行所有矢量数据属性融合批量处理操作。应用效果如下图所示。按照天地图数据属性整理技术要求,程序稳定高效地完成了全省矢量融合数据属性全角半角转换、属性空值标准化和生成统一标准的要素图元标识码。在属性规整方面处理结果100%通过国家测绘地理信息局的质量检查。

 

4.结束语

FME为我们提供了丰富多样,功能强大的转换器,深入学习并灵活应用是实际数据生产处理过程的重要一步。本文介绍的就是在FME中主要灵活应用“PythonCaller”、“NULLAttributeMapper”、“StatisticsCalculator”转换器快速开发程序解决天地图数据融合最后的赋唯一码、全半角转换、空值处理等属性规整问题。通过FME设计开发数据批量处理程序,自动、高效地实现了“天地图·福建”矢量数据的属性融合批量处理,减少了数据属性人工处理工作量,提高了数据融合项目生产效率,保证融合成果的属性处理准确度,具有较强的实用性。

本文标签: 2019FME博客大赛FME在天地图数据融合属性整理中的应用