免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 4401|回复: 15
收起左侧

2020FME博客大赛——基于FME的地理国情监测 全集水网检查与入库

[复制链接]

324

主题

56万

铜板

1172

好友

等待验证会员

Rank: 1

积分
349368

宣传勋章爱心勋章组织勋章官方团队冰雪节勋章

发表于 2020-12-24 14:11 | 显示全部楼层 |阅读模式

作者:陈兴波

单位:宁夏回族自治区测绘地理信息院


摘要

本文针对2019年基础性地理国情监测全集水网数据更新工作,利用FME软件设计了关于数据质量检查及入库的方法,实现了全集水网数据快速检查和水体实体关系映射表自动填写功能并通过FME Mapping File建立了简单的交互界面。使用基础性地理国情监测数据入库检查工具进行了验证,结果表明该方法高效、可靠。在本单位全集水网更新工作中发挥了巨大作用,大幅提高了工作效率,节约了时间。


1 绪论

1.1 背景

2016年在原国家测绘地理信息局的统一安排下,以第一次地理国情普查与2016年基础性地理国情监测水系数据为本底数据,经过集水区生成、河渠水系全集构网、湖泊水库坑塘实体化、河渠与湖库的关联等处理,生成了全国范围内的全集水网数据。2019年将“全集水网更新”工作部署给了各省(市、自治区)[1]。

1.2 难点

(1)数据更新工作量大

根据实施方案,需将2017、2018年水系变化数据更新至全集水网,部分省(市、自治区)还要求更新2019年数据,不仅要更新图形和属性,还需进行编码[1]。

                                                                        表1-1 全集水网编码规则

编码对象及字段

编码结构

编码规则

河渠

(GRCODE)

AAAAAAGNNNNM

AAAAAA为集水区代码,前三位为一二三级片区代码,后三位为顺序码,如果河渠跨多个集水区,顺序码以000表示,如果跨越一二三级片区,对应片区代码也为0;G为河渠等级,数字越小,等级越高;NNNN为顺序码;M为标识码。

湖泊库塘

(GCODE)

CAAAAAANNNNNG

C为类型码,L为湖泊、水塘,B为水库;AAAAAA为集水区代码,规则与河渠一致;NNNNN为顺序码;G为等级,分为1-7级,面积大于1km2的为6级,其余为7级。

备注:河渠流经的湖泊库塘、障碍点需填写对应河渠编码


(2)本底数据错误较多

本底数据中存在编码错误、编码顺序码重复、相同编码不连通等错误,需要进行修改。

(3)河渠汇流情况复杂

河渠通过有向线表示,相互之间存在汇流关系,按形态可分为扇状、羽状、平行、树状和格状水系[2][3]。存在多条河渠汇入一条河渠,一条河渠汇入多条河渠的情况,需填写水体实体关系映射表反映,还需反映河渠断头(1)、出境(4)、入湖(8)、入海(9)情况,人工填写易出现错漏。

障碍点需填写汇入(1)、流经(2)、源头(3)、河侧(4)关系类型。

表1-2 映射表示例

河流名称代码

RCODE

河流名称

RNAME

汇入河流名称代码

TORCODE

流入类型

TOTYPE

FA0000100010

长江

9

9

FA0012500010

秋浦河

FA0000100010



                                                                  图1-1 河流形态示意图


2 规则设置

2.1 数据准备与前置条件

(1)数据检查和映射表填写均需将数据根据河渠编码(GRCODE)和水面编码(GCODE)、国情分类码(CC)和名称(NAME)字段进行融合,FME中LineCombiner没有容差设置选项,融合效果不理想。因此使用PythonCaller在FME中调用ArcGIS中Dissolve工具对河渠和水面进行融合[4],使用AttributeExposer暴露属性。

                                                                图2-1 PythonCaller设置

(2)部分检查需依据河渠流向进行,使用VertexRemvoer提取起点与终点,并新增起点、终点属性。

(3)部分检查需依据河渠等级(7位)与顺序码(8-11位)进行,使用@Substring功能提取GRCODE第7-11位组成新的顺序码ORCODE。

2.2 数据检查

2.2.1 河渠检查

(1)重复顺序码检查

创建集水区和顺序码字段并提取相关信息,查找集水区和顺序码相同的要素,不比较图形,合并结果,方便定位显示。

                                                                     图2-2 重复顺序码检查

(2)集水区代码正确性检查

1)将河渠与集水区叠加,集水区建立GRCODE列表,输出的线以GRCODE为组建立集水区代码列表并移除重复项,然后统计每条河渠对应的集水区数量,数量等于1的判断河渠代码前6位与集水区代码是否一致。

2)对集水区数量大于1的列表排序,提取出第一条和最后一条记录,逐位判断两者集水区代码的片区代码异同及与GRCODE中集水区代码编码是否一致。

                                                                     图2-3 集水区代码正确性检查

(3)6级河渠唯一性检查

将(2)中面端口建立的GRCODE列表炸开,筛选出等级为6的河渠,按集水区代码建立列表,去重后判断一个集水区是否存在多条6级河渠。

                                                                        图2-4 6级河渠唯一性检查

(4)河渠等级检查

判断GRCODE等级码与等级字段(NGRADE)数值是否一致,并计算河渠长度,判断GRCODE等级码与长度是否一致。

                                                                  图2-5 河渠等级检查

(5)多部件检查

1)使用AggregatorFilter判断河渠是否存在多部件不连通情况。

2)对河渠按GRCODE叠加,点端口输出的点为2条以上GRCODE相同的河渠呈“丁”、工”“十”字相交。

3)以GRCODE分组建立名称列表,去除重复项,统计GRCODE对应的NAME数量,判断是否存在一个GRCODE对应多个NAME的情况。

                                                                    图2-6 多部件检查

2.2.2 湖泊库塘检查

(1)重复顺序码检查

同河渠。

(2)集水区代码正确性检查

同河渠。

(3)类型检查

判断湖泊坑塘GCODE首字母是否为“L”,水库GCODE首字母是否为“B”。

                                                                        图2-7 类型检查

(4)湖泊库塘等级检查

判断GCDOE等级码与等级字段(NGRADE)所填数值是否一致,并计算湖泊库塘面积,判断GCODE等级码与面积是否一致。

                                                                   图2-8 湖泊库塘等级检查

(5)多部件检查

同河渠。

(6)所在河流检查

对河渠生成缓冲区,筛选出与其相交的湖泊库塘,筛选出流经库塘的GRCODE并建立列表,将列表转置连接,判断其是否包含所在河流代码。

                                                                            图2-9 所在河流检查

2.2.3 障碍点检查

(1)点线拓扑关系检查

将河渠与障碍点叠加,障碍点建立GRCODE列表,判断点是否落在线上。

                                                                  图2-10 点线拓扑关系检查

(2)所在河流检查

对(1)中落在线上的点创建局部唯一序号,炸开GRCODE列表,提取ORCODE,以序号分组建立ORCODE列表并升序排序,判断第一位与所在河流代码是否一致。

                                                                          图2-11 所在河流检查

(3)关系类型检查

1)对障碍点创建局部唯一序号,建立缓冲区,筛选出与湖泊库塘相交的障碍点,将湖泊库塘面转线,两者叠加后判断未叠加上的点类型是否为2。

2)将河渠起点、终点与湖泊库塘线叠加,以叠加上的点为基础筛选出落在线上的障碍点,判断终点类型是否为1,起点类型是否为3。

                                                                        图2-12 关系类型检查

(4)障碍点采集正确性检查

湖泊库塘面裁剪河渠,使用Snipper按百分比设置各50%提取中点,新增中点属性,与(3)中的起点、终点创建局部唯一序号。然后建立缓冲区,筛选出未能与障碍点相交的点,将其与湖泊库塘线叠加,筛选出落在线上的点,即为应补充或修正采集障碍点。

                                                                   图2-13 障碍点采集正确性检查

2.2.4 映射表填写

建立标记字段进行标记,自动填写时排除标记要素。河渠跨省级任务区(集水区)时,工作流判断结果与实际情况不符,需要人工编辑填写。

(1)汇流关系检查

给河渠起点、终点CC和GRCODE增加后缀,对点和河渠创建局部唯一序号。建立缓冲区,将河渠序号建立列表并赋值给点,炸开列表,将河渠的属性以河渠序号为组赋给点缓冲区,筛选出点缓冲区编码与线编码一致的,根据点序号筛选出对应点,并以GRCODE建立列表,炸开列表,判断CC为1011的,其点的等级是否大于等于线的等级,判断CC为1012的,其点的等级是否小于等于线的等级。

                                                                             图2-14 汇流关系检查

(2)汇流河渠填写

河渠汇流关系是不同的,河流支流汇入干流,即等级低的河流流入等级大于等于自身的河流;水渠干渠流向支渠,即等级高的水渠流入等级小于等于自身的水渠。针对一条河渠汇入多条的情况,原则上优先流入等级较高的河渠,等级相同时,优先流入顺序码较小的河渠。

1)提取河渠的起点和终点,为终点编码增加后缀,创建局部唯一序号,提取ORCODE,点线叠加后点端口建立GRCODE和ORCODE列表,炸开列表,判断出点、线编码是否一致。

2)点、线编码不一致的点以点编码分组建立GRCODE和ORCODE列表,统计每个点编码对应的线编码数量,等于1的直接输出;不等于1的点与河渠起点叠加,连接属性,判断叠加数量是否大于1,对小于等于1的点ORCODE列表升序排序,提取第一位,大于1的点与提取的点去重后输出。

3)输出结果,根据映射表属性结构建立对应字段,填写RNAME时使用条件判断,NAME为缺省值时,填写点编码。以RCODE分组建立TORCODE和ORCODE列表,统计每个RCODE对应的TORCODE数量是否为1,等于1的直接填入映射表;不等于1的ORCODE升序排序,提取第一位,保证优先流入等级较高顺序码较小的河渠,填入映射表。

                                                                        图2-15 汇流河渠填写


(3)无汇流河渠填写

从UV_BOUL中提取出国界,从CV_HYDA中提取出湖泊库塘和海面,面转线,与(2)中点、线编码一致的点叠加,判断点有无叠加,无叠加的为断头,有叠加的根据线的CC类型依次确定出境、入湖和入海,四种情况同(2)中一样输出至对应字段,填入映射表。

                                                                        图2-16 无汇流河渠填写

(4)编码完整性检查

                                                                         图2-17 编码完整性检查


3 实际案例

以2019年基础性地理国情监测宁夏任务区灵武市和盐池县所在的全集水网数据进行实验,共40个集水区,2115条河渠(河流841条,沟渠1274条),761个水系面(湖泊、库塘613个),132个障碍点,与黑龙江省、陕西省、甘肃省任务区接边,基本可以反映全集水网的各种情况。

                                                                      图3-1 实验数据分布示意图

实验电脑使用Intel i7 6700处理器、64G DDR4内存、4TB机械硬盘、64位Windows 7操作系统,64位FME 2018.1。

检查耗时50秒,入库耗时43秒,检查完成后针对报出的错误进行修改,并填写映射表。最后使用基础性地理国情监测数据入库检查工具(下简称“入库检查工具”)进行复查,以评判本文的检查和填表结果正确性。

                                                                     图3-2入库检查工具检查结果

从图3-1和图3-2可以看出,报错位置多位于与外省任务区接边处,与人工标记一致,为可忽略的合理错误。其余错误经排查后发现是入库检查工具检查前未对数据进行融合。

综上所述,与入库检查工具检查结果对比可以认为本文方法有效。


4 总结与展望

4.1 总结

(1)由于FME需要处理多种格式的数据,例如PointOnAreaOverlayer、SpatialFilter等转换器无容差设置选项,导致数据比较、选择时,容易出现错漏[5]。故设置了0.01米缓冲区,代替规范要求的容差[6]。

(2)本文使用的转换器多、流程复杂,非设计者使用若误移动转换器,易改变工作流,无法得到正确结果。因此本文在检查入库基础上,引入Directory and File Pathnames与WorkspaceRunner的组合[7],通过User Parameters传递参数,进行简单的流程设计,将主工作流保存为FME Mapping Files(*.fme),其他使用者仅需通过FME Quick Translator选择数据位置、输出位置及对应检查入库项即可,可同时运行多个子工作流,提高了运行效率。

                                                      图4-1 WorkspaceRunner工作流

                                           图4-2 FME User Parameters设置与Quick Translator界面

(3)本文根据全集水网有关规定,结合实际生产作业,基于FME设计了高效的检查与入库方法,目前该方法已运用于本单位全集水网生产作业中,大幅提高了工作效率与数据质量。与入库检查工具比较,前者无障碍点检查项,本文根据有关规定及培训内容,进行了设置;前者针对同一编码错误仅报出一条,其余均提示GRCODE或OBJECTID,无法定位,本文方法提前融合数据,方便定位。

4.2 展望

(1)ListSorter无法像Sorter一样对多项进行组合排序,只能对列表中一项进行排序。全集水网编码规则等级与顺序码在一起,在障碍点检查、映射表填写中,可引入等级与顺序码组合的新顺序码,若编码不在一起或升序与降序组合,则无法完成排序,在FME Coummunity中已有提出为ListSorter引入多项组合排序的建议[8],希望今后能够实现。

(2)使用WorkspaceRunner运行子工作流时,仅能在Windows任务管理器中看到FME进程,无法看到进度或者日志,为了便于了解子工作流运行情况,添加了Inspector,在运行成功后弹出。但运行失败则无法提示,需手动查看日志,希望今后能够将日志显示在软件内。

(3)存在多条河渠流经湖泊、库塘时,应选取主要河渠提取流经障碍点,其余河渠提取源头或汇入障碍点。针对该情况目前未能设计出判断方法,故障碍点检查容易出现误报,希望在今后的工作中能够解决。



参考文献

[1] 2019年全国基础性地理国情监测实施方案[S]. 北京:国家基础地理信息中心, 2019-06-18.

[2] 全国水网数据集更新[Z]. 北京: 2019, 7.

[3] Dave. Using Arcpy for FME Feature Processing[EB/OL]. 2017-07-04. https://knowledge.safe.

com/articles/47216/using-arcpy-for-fme-feature-processing.html.

[4] 许庆领, 段文华. 地理国情河流实体编码方法研究[J]. 地理空间信息, 2019, 17(12): 35-37.

[5] Mark Ireland. FME 2018 Infinity War: How Automatic Tolerance Defeats Infinite Precision without a Snap – but with Anchored Vertices[EB/OL]. 2018-09-06. https://www.safe.com/blog/

2018/09/fme2018-tolerance-evangelist179.

[6] GQJC 01-2019 基础性地理国情监测数据技术规定[S]. 北京:国家基础地理信息中心, 2019-05-07.

[7] Rob Batch Processing Using the WorkspaceRunner[EB/OL]. 2015-10-13. https://knowledge.

safe.com/articles/1469/batch-processing-using-the-workspacerunner-1.html.

[8] David Reksten. ListSorter to support multiple sort-by criteria[EB/OL]. 2018-06-08. https://knowledge.safe.com/conte ... t-by-criteria.html.


本文转载来自CSDN作者:fmechina  版权归作者所有

原文链接:https://blog.csdn.net/fmechina/article/details/105544792



10

主题

2万

铜板

34

好友

黄金会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
4394

精华勋章灌水勋章活跃勋章贡献勋章

发表于 2020-12-24 14:47 | 显示全部楼层
谢谢分享
回复

使用道具 举报

43

主题

5万

铜板

19

好友

至尊VIP

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
3570

精华勋章12周年纪念勋章

发表于 2021-1-11 22:03 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

3万

铜板

10

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6105
发表于 2021-12-6 14:44 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

5148

铜板

1

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2100
发表于 2022-7-3 16:38 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

30

主题

2万

铜板

59

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6281
QQ
发表于 2023-3-16 16:03 | 显示全部楼层
:zt:zt:zt:zt
回复 支持 反对

使用道具 举报

3

主题

2482

铜板

1

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
1015
发表于 2023-3-20 08:41 | 显示全部楼层
感谢分享
回复

使用道具 举报

8

主题

5258

铜板

16

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
644
发表于 2023-6-15 16:33 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

3233

铜板

2

好友

工程师

Rank: 7Rank: 7Rank: 7

积分
429
发表于 2023-6-24 15:15 | 显示全部楼层
学习学习
回复

使用道具 举报

0

主题

3233

铜板

2

好友

工程师

Rank: 7Rank: 7Rank: 7

积分
429
发表于 2023-6-24 15:33 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表