ST_ChaikinSmoothing — Returnerar en utjämnad version av en geometri med hjälp av Chaikin-algoritmen
geometry ST_ChaikinSmoothing(
geometry geom, integer nIterations = 1, boolean preserveEndPoints = false)
;
Utjämnar en linjär eller polygonal geometri med hjälp av Chaikins algoritm. Graden av utjämning styrs av parametern nIterations
. Vid varje iteration ersätts varje inre toppunkt med två toppunkter som ligger på 1/4 av längden på linjesegmenten före och efter toppunkten. En rimlig grad av utjämning uppnås med 3 iterationer; den maximala graden är begränsad till 5.
Om preserveEndPoints
är true utjämnas inte ändpunkterna för Polygon-ringar. Slutpunkterna för LineStrings bevaras alltid.
![]() |
|
Antalet toppar fördubblas för varje iteration, så resultatgeometrin kan ha många fler punkter än indata. För att minska antalet punkter kan du använda en förenklingsfunktion på resultatet (se ST_Simplify, ST_SimplifyPreserveTopology och ST_SimplifyVW). |
Resultatet har interpolerade värden för Z- och M-dimensionerna när sådana finns.
Denna funktion stöder 3d och kommer inte att tappa z-index.
Tillgänglighet: 2.5.0
Utjämning av en triangel:
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))
Utjämning av en polygon med 1, 2 och 3 iterationer:
![]() nIterationer = 1 |
![]() nIterationer = 2 |
![]() nIterationer = 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) );
Utjämning av en LineString med 1, 2 och 3 iterationer:
![]() nIterationer = 1 |
![]() nIterationer = 2 |
![]() nIterationer = 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) );