ST_ChaikinSmoothing — 使用 Chaikin 演算法返回幾何體的平滑版本
geometry ST_ChaikinSmoothing(
geometry geom, integer nIterations = 1, boolean preserveEndPoints = false)
;
使用 Chaikin 演算法平滑線性或多邊形幾何體。平滑程度由 nIterations
參數控制。在每次迭代中,每個內部頂點都會被位於該頂點前後線段長度 1/4 處的兩個頂點替換。3 次迭代可提供合理的平滑度;最大值限制為 5。
如果 preserveEndPoints
為 true,則不會平滑多邊形環的端點。LineString 的端點始終保留。
![]() |
|
頂點的數量在每次迭代時都會加倍,因此結果幾何體的點可能比輸入多很多。為了減少點的數量,請對結果使用簡化函數(請參閱ST_Simplify、ST_SimplifyPreserveTopology 和 ST_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) );