ST_SimplifyVW — Returnerar en förenklad representation av en geometri med hjälp av Visvalingam-Whyatt-algoritmen
geometry ST_SimplifyVW(geometry geom, float tolerance);
Returnerar en förenklad representation av en geometri med Visvalingam–Whyatt-algoritmen. Förenklingens tolerance är ett areavärde i kvadrerade enheter för indatans SRS. Förenklingen tar bort noder som bildar ”hörn” med en area mindre än toleransen. Resultatet behöver inte vara giltigt även om indata är det.
Funktionen kan anropas med alla typer av geometri (inklusive GeometryCollections), men endast linje- och polygonelement förenklas. Ändpunkter för linjär geometri bevaras.
|
|
|
Den returnerade geometrin kan förlora sin enkelhet (se ST_IsSimple), topologin kanske inte bevaras och polygonala resultat kan vara ogiltiga (se ST_IsValid). Använd ST_SimplifyPreserveTopology för att bevara topologin och säkerställa giltigheten. ST_CoverageSimplify bevarar också topologin och giltigheten. |
Detta är en allmän förenklingsfunktion. Den kan ta bort smala polygonspikar när deras effektiva area är under toleransen, men den är inte en särskild åtgärd för att ta bort spikar eller reparera polygoner. Använd ST_IsValid för att kontrollera resultatet och ST_MakeValid för att reparera ogiltiga polygonresultat vid behov.
Denna funktion bevarar inte gränser som delas mellan polygoner. Använd ST_CoverageSimplify om detta krävs.
Denna funktion hanterar 3D och den tredje dimensionen kommer att påverka resultatet.
Tillgänglighet: 2.2.0
Den här polygonen har en smal spik vars effektiva area är tillräckligt liten för att tas bort med en tolerans på 20 kvadratenheter.
SELECT geom AS original, ST_SimplifyVW(geom, 20) AS simplified FROM (SELECT 'POLYGON((0 0,10 0,10 10,5.2 10,5 16,4.8 10,0 10,0 0))'::geometry AS geom) AS t;
POLYGON((0 0,10 0,10 10,5.2 10,5 16,4.8 10,0 10,0 0)) | POLYGON((0 0,10 0,10 10,0 10,0 0))
En LineString förenklas med en tolerans för minsta area på 30. För en linjär förenkling med ST_Simplify skulle en jämförbar tolerans vara en längd i enheter för indatans SRS, så värdet här är ungefär den linjära toleransen i kvadrat.
SELECT ST_SimplifyVW(geom, 30) simplified FROM (SELECT 'LINESTRING(5 2,3 8,6 20,7 25,10 10)'::geometry AS geom) AS t;
LINESTRING(5 2,7 25,10 10)
Förenkling av en linje.
SELECT ST_SimplifyVW('LINESTRING (10 10,50 40,30 70,50 60,70 80,50 110,100 100,90 140,100 180,150 170,170 140,190 90,180 40,110 40,150 20)'::geometry,
1600);
LINESTRING(10 10,100 100,100 180,150 170,190 90,150 20)
Förenkling av en polygon.
SELECT ST_SimplifyVW('POLYGON ((20 20,50 60,20 120,40 170,80 180,120 140,180 180,160 130,180 100,180 30,130 70,150 10,20 20))'::geometry,
1600);
POLYGON((20 20,20 120,80 180,160 130,180 30,20 20))
ST_SetEffectiveArea, ST_Simplify, ST_SimplifyPreserveTopology, ST_CoverageSimplify, Topologi ST_Simplify