名称

ST_ChaikinSmoothing — 使用 Chaikin 算法返回几何图形的平滑版本

语法

geometry ST_ChaikinSmoothing(geometry geom, integer nIterations = 1, boolean preserveEndPoints = false);

说明

使用 Chaikin 算法平滑线形或多边形几何图形。平滑程度由 nIterations 参数控制。在每次迭代中,每个内部折点都将替换为两个折点,这两个折点位于折点前后线段长度的 1/4 处。3 次迭代可提供合理的平滑度;最大限制为 5 次。

如果 preserveEndPoints 为 true,则多边形环的端点不会被平滑。直线的端点始终会被保留。

[Note]

每次迭代都会使折点数翻倍,因此结果几何图形可能比输入几何图形多很多点。要减少点数,请对结果使用简化函数(请参阅 ST_SimplifyST_SimplifyPreserveTopologyST_SimplifyVW)。

当存在 Z 和 M 维度时,结果会对其进行插值。

此函数支持 3d,并且不会丢弃 z 索引。

可用性:2.5.0

示例

平滑三角形

SELECT ST_AsText(ST_ChaikinSmoothing(geom)) smoothed
FROM (SELECT  'POLYGON((0 0, 8 8, 0 16, 0 0))'::geometry geom) AS foo;

                 smoothed
───────────────────────────────────────────
 POLYGON((2 2,6 6,6 10,2 14,0 12,0 4,2 2))

使用 1、2 和 3 次迭代平滑多边形

nIterations = 1

nIterations = 2

nIterations = 3

SELECT ST_ChaikinSmoothing(
            'POLYGON ((20 20, 60 90, 10 150, 100 190, 190 160, 130 120, 190 50, 140 70, 120 10, 90 60, 20 20))',
            generate_series(1, 3) );

使用 1、2 和 3 次迭代平滑直线

nIterations = 1

nIterations = 2

nIterations = 3

SELECT ST_ChaikinSmoothing(
            'LINESTRING (10 140, 80 130, 100 190, 190 150, 140 20, 120 120, 50 30, 30 100)',
            generate_series(1, 3) );

另请参阅

ST_SimplifyST_SimplifyPreserveTopologyST_SimplifyVW