名稱

ST_ChaikinSmoothing — 使用 Chaikin 演算法返回幾何體的平滑版本

概要

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

描述

使用 Chaikin 演算法平滑線性或多邊形幾何體。平滑程度由 nIterations 參數控制。在每次迭代中,每個內部頂點都會被位於該頂點前後線段長度 1/4 處的兩個頂點替換。3 次迭代可提供合理的平滑度;最大值限制為 5。

如果 preserveEndPoints 為 true,則不會平滑多邊形環的端點。LineString 的端點始終保留。

[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 次迭代平滑 LineString

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) );