转换器SherbendGeneralizer示例
原文发布时间:2016-11-24
翻译文章链接:https://knowledge.safe.com/articles/1283/sherbendgeneralizer-example.html
点击:示例模板下载
简介
SherbendGeneralizer是能够做到“智能”概化(generalization)的FME转换器。它能够保留原始要素的拓扑结构。
Sherbend算法的目标是,根据线要素弯曲部位的分析,减少线要素不必要的细节。Sher bend算法是一个基于约束条件的算法,它保留输入的点、线要素的拓扑结构。Sherbend算法通过直径参数(Diameter参数)选择弯曲部位,然后通过迭代概化线要素的弯曲部位。在解决线要素冲突时,可能会消除,减少,或合并弯曲部位。
概化线要素弯曲部位的策略如下:
1、 使用“Diameter”参数计算参考圆的面积
2、 对每条线,决定弯曲部位的位置
3、 对每个弯曲部位,计算它的周长。然后,构造一个有相同周长的圆。最后,弯曲部位的校正面积采用该圆75%的面积
4、 对每个弯曲部位,如果它的校正面积低于参考圆面积,并且满足拓扑约束条件,那么概化弯曲部位
5、 重复上述步骤,直到没有更多的弯曲部位需要概化
示例
例1:拓扑检查
通常,一个简单的示例比一堆解释性说明更直观。这就是我使用SherbendGeneralizer反复处理一个数据集,直到理解该转换器是如何工作的原因。
FME中已有的概化算法既未考虑要素间的相互关系,也未考虑对每个单独的要素可能造成的不好的改变。
下图分别是等高线和高程点在“旧”的概化转换器处理之前和之后的截屏。
“旧”转换器:
概化前:
通过Generalizer转换器概化后:
我们可以观察到,概化后的等高线至少有三种问题:
1、 一条等高线存在自相交
2、 高程值为437的高程点在转换前后,分别位于440等高线的不同两侧,导致等高线和高程点的位置关系出现错误
3、 等高线之间相交
转换器SherbendGeneralizer能够处理上述三个问题:
它能够控制:
1、 自相交
2、 线之间相交
3、 Sidedness,也就是,它确保没有改变线与点之间的位置关系。
SherbendGeneralizer转换器:
如果概化时产生了改变,该转换器会查看是否存在冲突。转换器的输出端口包含一个Conflicts端口,如果对该端口所示的弯曲部位做概化处理,那么,概化后的线会与选择的约束条件冲突。