形状平滑

1。概述

MapServer可以使用sia算法平滑向量层以获得更好的渲染结果:通过迭代平均平滑。

2。它是如何工作的

要使用默认设置为图层启用平滑,只需设置geomtransform:

  • 风水转换(冰沙([形状])

平滑设置:

  • 平滑大小:算法使用的窗口大小(点数)。默认值为3。

  • 平滑迭代:算法的迭代次数。默认值为1。

  • 预处理:可选的预处理方法,在平滑之前向形状添加更多顶点,如下所述。

可以使用以下geomtransform传递这些可选参数:

  • 风水转换(冰沙( [形状] ,请 [smoothing_size] ,请 [smoothing_iteration] ,请 [预处理] ))

简单层定义示例:

LAYER NAME "my_layer"
  TYPE LINE
  STATUS DEFAULT
  DATA roads.shp
  GEOMTRANSFORM (smoothsia([shape], 3, 1))
  CLASS
    STYLE
      WIDTH 2
      COLOR 255 0 0
    END
  END

三。示例

下面是一些显示不同参数值结果的示例。

../_images/smoothing1.png ../_images/smoothing2.png

第四章。平滑结果因子

由于平滑算法是在X顶点的窗口(默认为3)上执行的,因此有一些因素可能会影响结果。

4.1数据集分辨率过高

如果试图平滑具有非常高分辨率的线(当前视图比例下顶点的高密度),则可能无法获得预期的结果,因为顶点对于平滑窗口大小而言过于密集。在这种情况下,您可能希望在平滑之前简化形状。您可以在单个geomtransform中组合平滑和简化。

  • geomtransform(平滑(simplifypt([形状],10)))

RFC 89: Layer Geomtransform 更多信息。以下是问题的可视化:

../_images/smoothing_highres.png

4.2数据集分辨率过低

如果试图平滑顶点密度较低的长线,在某些情况下可能会在平滑过程中丢失形状的某些重要部分(例如锐角周围),则可能无法获得预期结果。可以通过启用预处理步骤在平滑之前沿直线添加中间顶点来改进结果。

此行为使用smoothsia()geomtransform的预处理参数中的“all”值进行控制:

  • 风水转换(冰沙( [形状] ,请 [smoothing_size] ,请 [smoothing_iteration] ,'全部')

此预处理将在平滑之前执行。它在每个原始顶点的每一侧添加2个中间顶点。如果我们真的需要用低分辨率数据保存形状的一般形状,这是很有用的。注意,这可能会影响渲染,因为输出中有更多的顶点。

以下是问题的可视化:

../_images/smoothing_lowres.png

4.3曲线

预处理步骤可能不适用于所有情况,因为它会对平滑结果产生很大影响(可能会太大?)但是,如果没有它,你可能会注意到一些大曲线的不好平滑。请参见此示例:

../_images/smoothing_curve1.png

您可以通过启用另一种类型的预处理来改进这一点:角度。这将在一些特定的地方添加基于角度检测的点来识别曲线。以下是如何启用它:

  • 风水转换(冰沙( [形状] ,请 [smoothing_size] ,请 [smoothing_iteration] ,'角度')

../_images/smoothing_curve2.png