参赛单元:传统GIS数据处理
作者:李芃乐
单位:陕西迪博景源测绘地理信息有限公司
很有幸在入测绘这行的时候就接触了强大的FME,回顾FME陪伴我的这四年,从最开始最简单的格式转换,到照猫画虎的模仿别人的模板,再到自己尝试写一些模板解决工作中的问题,再到现在的将FME融入到作业流程中。
可以说FME见证了我技术的进步。在矢量化中使用了格式转化、图形拓扑检查与修复;土地确权中四至的提取、数据质检、表格输出;农村宅基地确权中的数据质检、宗地图的生成与输出等。让我在接触了三调项目后第一时间就在想FME在三调中可以发挥那些作用。
笔者在三调过程中主要在参考数据的整合分析、三调内业数据处理及入库、三调内业工作量统计中使用了FME。
具体流程图如下
由于此项工作为一次性工作,且为较简单的空间叠加分析,本文不做详述
内业数据的处理过程中,主要使用了FME的空间分析、属性生成等功能,主要流程如下
本文主要分享预处理阶段数据处理及质检以及接边检查的部分内容。
笔者发现在工作量统计这块尤其是修改过程中的工作量统计,一直存在统计不准确、难以量化、难以反映难易程度等问题,数据管理过程中也存在数据丢失、数据混乱、工作交接困难等问题。笔者试着通过FME来解决,在此分享一个正在试用的一个方法,希望给大家带来启发,也希望听到大家更好的解决方法。
1.1主要实现的功能及对应使用的主要转换器
功能 |
主要转换器 |
转换器功能 |
预编号处理 |
DuplicateFilter |
根据一个或多个关键字段值,删除值重复的要素 |
Count |
添加一个计数属性 |
|
修复几何 |
GeometryValidator |
修复一部分几何错误 |
弧转多段线 |
ArcStroker |
通过沿着弧要素边界内插一系列的小线段替代原来的图形,将弧要素转化为线要素。 |
图内缝隙处理 |
Snapper |
如果要素的终点或顶点的距离在一定范围内,并且(可选的)它们有一个或多个相同的属性,则捕捉在一起。 |
AreaGapAndOverlapCleaner |
维护区域拓扑解决相邻区域之间的缝隙和重叠。 |
|
与村界间 的缝隙 |
AnchoredSnapper |
将一系列符合输入标准的要素,与位于特定容差范围内、也符合输入标准的要素进行捕捉。 |
Clipper |
裁剪面 |
|
碎面的融合 |
TopologyBuilder |
在输入的点、线和/或面要素上计算拓扑,并输出重要的节点、边和面,并带有描述拓扑关系的属性。 |
1.2 弧转多段线
这个主要是线状地物面状化过程中使用ArcGis的缓冲造成的。使用ArcStroker前后:
但是处理后会产生细小的缝隙,这是时候可以使用AreaGapAndOverlapCleaner来修复这种缝隙:
1.3 与村界间的缝隙
为了后续接边的自动检查,这里要求每个以村为单位的数据必须与村界间完全套合,没有拓扑错误。这里主要使用了Clipper转换器进行双向裁剪,先使用村界裁剪地类图斑,再使用地类图斑裁剪村界得到与村界间的缝隙。
1.4 碎面的融合
除了与村界间的缝隙,在作业过程中也可能产生碎面。在预处理的过程中先针对10平方米(数值可以调整)以下的碎面与邻近大图斑融合。主要步骤如下:
①使用TopologyBuilder建立拓扑关系,面输出端按照面积筛选出需要处理的碎面;
②筛选出来的碎面与边输出端挂接,筛选出对应碎面的边;
③按照长度选取碎面的最长边;
④使用FeatureMerger把最长边所在的大面的唯一标识符(_face_id)赋值给碎面;
⑤使用Dissolver用_face_id分组进行融合。
Tips:_face_id为TopologyBuilder自动生成的每个面的唯一标识符。
1.5 其他功能
①通过FeatureMerger和数据字典对数据代码所对应的属性值进行赋值。本文不再叙述;
②使用PointOnAreaOverlayer赋值坐落单位代码和名称,并将压盖计数属性等于0或者大于1的提取出来输出到待核实层,供作业员核实。
这一步是为了防止面融合或者处理分析过程中发生丢面或者属性值改变。在图形转换前使用CenterPointReplacer为每个图斑生成包含全部属性的点要素,待图形转换完成后使用PointOnAreaOverlayer进行赋值,同时计数属性等于0或者大于1的要素有可能发生了丢面或者属性变化。
预检查是内业作业过程前期使用最频繁的一个模板,除包含常规检查中的面重叠、缝隙、狭长角等常规的拓扑检查,还针对三调项目制作了节点密度检查、不规则图形检查、线状地物宽度检查、相邻图斑属性一致未合并检查以及属性逻辑性检查。
2.1主要实现的功能及对应使用的主要转换器
功能 |
主要转换器 |
转换器功能 |
常规拓扑检查 |
AreaOnAreaOverlayer |
进行面与面的叠加(多边形的交点)操作 |
DonutHoleExtractor |
将一个有洞的多边形分离为洞和环这两个组成部分。 |
|
SpikeRemover |
通过在2D中消除尖锐来清理要素几何对象。 |
|
节点密度检查 |
Chopper |
把输入要素分割为点、线或面。 |
线状地物宽度检查 |
CenterLineReplacer |
用面要素的中轴、直骨架线来替代面要素。 |
相邻属性一致未合并检查 |
Intersector |
对所有的输入要素、断裂线和多边形,在发生相交处计算交叉点并在这些位置创建节点。 |
属性 逻辑性检查 |
TestFilter |
通过测试条件过滤要素到一个或多个输出端口。 |
AttributeCreator |
将一个或多个属性添加到该特性要素,并可选地从常量、属性值和表达式派生出一个值。 |
2.2节点密度检查
根据国家下发的《县级数据库质检软件v1.0质量检查细则》中图形节点密度要求,平均节点密度不得小于1米,或大于50米。
虽然周长/节点数量可以得到平均节点密度,但是为了方便定位问题,除了检查平均节点密度,还将节点间距离小于0.01和大于100米的节点筛选出来进行核实。
2.3不规则图斑检查
根据国家下发的《县级数据库质检软件v1.0质量检查细则》中不规则图斑检查(面积/周长<0.2,并且有一个角度小于20)。
计算角度的时候笔者用了最原始的余弦定理,通过AttributeCreator转换器可以读取邻近元素来计算某一节点的角度。
应该还有更好更快的求角度的方法,希望能得到大佬的指点。
2.3 线状地物宽度
线状地物宽度在作业的过程中已经填写,这里使用计算值和填写值进行对比,筛选出差值过大的,人工核实。
①首先使用CenterLineReplacer提出骨架线;
②使用Intersector和PointOnLineOverlayer去掉悬挂线,得到中心线。
③计算平均宽度,计算与填写属性值的差值,距离差大于20%的提取出核实。
2.4相邻图斑属性一致未合并
使用Intersector即可,生成列表,对比列表中的属性,完全一致的即为相邻图斑未合并的。
2.5属性检查
参考质检规则,对图斑细化代码存在的合理性、关联性进行检查。
2.6小结
经过预处理和预质检,基本上可以满足提取外业核实图斑和下一步接边的要求,不会将错误积累到下一个工作流程中,提高了工作质量,防止返工。
接边错误笔者自己分为两种即边界两边属性不一致,边界两边属性一致但图形不一致。(附图)
错误一、边界两边属性不一致
错误二、边界两边属性一致,但是节点不一致
①使用LineOnAreaOverlayer先选出接边处的图斑;
②使用Intersector处理村界和图斑,根据压盖计数和列表属性判断接边两侧图斑属性是否相同,将属性不同的提取出来。
对于两侧图斑属性不同的,正常存在的图斑无法过滤掉。
①作业员每天按照规定路径提交当日作业的数据库
②每天定时运行更新模板,将每日作业库中的修改部分分别更新至备份层和变化层。
目前只使用了一周左右,目前感觉在工作量统计方面统计更加直观,杜绝了瞒报虚报。但是对于图形变化的统计按照面积统计和节点统计正在试验使用哪种统计方式更为合理,希望有类型经验的读者能同我交流,共同完善。
在数据管理方面,除了作业员每日个人备份,也在数据库中生成每日的变化图斑,并以日期命名为层,在整个项目流程中每天的数据变化均有记录。同时每天对全县作业总库进行更新,方便给甲方提供各种统计信息,也可以通过每天的更新量结合质检反映的问题对项目整体进度进行估算,方便项目负责及时调整人员及工作重心。
由于笔者没有参与试点镇数据建设,参与三调项目时间较短。可能还有缺漏与不足,希望读者给予指正。
相信在三调接下来的工作中,在FME的帮助下能更高效、更准确的完成三调工作。
最后感谢安图公司将FME带回中国,并且做了本地化及汉化的工作,极大的方便了英语渣的笔者使用。希望借此平台更好的提高自己的技术水平,交到志同道合的朋友。