目录
前言
一、功能介绍
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的去除伪节点。
总结
计算模型搭建完成后,上线后端,前端直接调后端接口就可以实现计算。
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树结构化数据分析工具PandasPandas概览208576 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!