转换器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端口,如果对该端口所示的弯曲部位做概化处理,那么,概化后的线会与选择的约束条件冲突。

猜你喜欢

转载自blog.csdn.net/fmechina/article/details/81101110