基于FME开发的几何数据拓扑错误自动化处理软件

目录

前言

一、功能介绍

 1、尖锐角修复

 2、图形自相交、图形多边形自触修复

 3、图形压盖重叠修复

 4、图形缝隙修复

 5、节点密度修复(去除伪节点、重复点)

二、后台算法实现逻辑

1.尖锐角修复

 2.图形自相交、图形多边形自触修复

 3、图形压盖重叠修复

 4、图形缝隙修复

 5、节点密度修复(去除伪节点、重复点)

总结



前言

目前大部分质检软件都会对几何图形进行校验,比如图形的自相交、多边形自触、尖锐角、伪节点、悬挂线、重复节点、重叠面、缝隙面等。虽然现在有不少软件能实现处理,但是处理后的效果会因为各种各样的数据而不尽人意,大部分的质检错误都是人工手动修改。基于以上痛点,开发了该自动化处理模块。


一、功能介绍

1、尖锐角修复

 2、图形自相交、图形多边形自触修复

 3、图形压盖重叠修复

4、图形缝隙修复

 5、节点密度修复(去除伪节点、重复点)

二、后台算法实现逻辑

1.尖锐角修复

虽然FME内有自带的去除尖锐角的算子SpikeRemover,但是该算子修复逻辑为去掉尖锐角的指定节点,这样会导致部分图形在修复的时候出现大量的图形变化。所以我选择了重新开发,模板如下

 实现逻辑是用python写三角函数计算出多边形的内角角度,然后找到尖锐角,并按照指定面积将尖锐角裁剪掉。最后将裁剪后的尖锐角进行邻近分析,选择公边最多的面进行融合。

2.图形自相交、图形多边形自触修复

 图形的自相交其实分为3种类型,2D自交叉、多边形自触、和悬挂线。FME自带的处理算子GeometryValidator有自相交修复功能,但是该修复功能只是单纯的对节点重新排序,并不会对图形本身进行调整,导致了用这个转换器处理后依旧会让不少质检软件报错。针对多边形自触,我采用了两者结合的方式,先用该算子来进行节点重排序,完成排序后,用python查找出多边形自触的真实点位,再计算出节点角度,选择节点角度小的部分,进行切除。针对2D自交叉和悬挂线我则采用的是Intersector重构交叉点,AreaBuilder重新构面来实现自交叉处理。

 3、图形压盖重叠修复

这大概是最简单的算法了,通过AreaOnAreaOverlayer找出重叠部分,然后选择公边最多的面将重叠部分进行融合。

 4、图形缝隙修复

针对面和面之间的缝隙FME有非常成熟的转换器Snapper。但是只是单纯用snapper片捕捉会出现各种问题,比如snapper的片捕捉,如果参数设置过大,会导致自身被吸附。如下图所示

 但是我我们想看到的结果却是这样

 那么如何让snapper不对自身捕捉呢,答案当然是python,构建全新算法。

5、节点密度修复(去除伪节点、重复点)

FME也自带了算法Generalizer转换器,通过节点抽稀来实现去除伪节点,但是通过测试,该转换器及其不稳定,很多伪节点不能去除。于是我放弃了该转换器,用python提取点坐标,根据节点顺序构建向量,再将在同一直线的向量查找出来,删除该向量的尾点。实现了无bug的去除伪节点。


总结

计算模型搭建完成后,上线后端,前端直接调后端接口就可以实现计算。

猜你喜欢

转载自blog.csdn.net/weixin_57664381/article/details/126055687