Namn

ST_SimplifyVW — Returnerar en förenklad representation av en geometri med hjälp av Visvalingam-Whyatt-algoritmen

Synopsis

geometry ST_SimplifyVW(geometry geom, float tolerance);

Beskrivning

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.

[Notera]

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

Exempel

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.

Kod
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;
Utdata
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))
Figur
Geometry figure for visual-st-simplifyvw-01

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.

Kod
SELECT ST_SimplifyVW(geom, 30) simplified
  FROM (SELECT 'LINESTRING(5 2,3 8,6 20,7 25,10 10)'::geometry AS geom) AS t;
Utdata
LINESTRING(5 2,7 25,10 10)
Figur
Geometry figure for visual-st-simplifyvw-02

Förenkling av en linje.

Kod
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);
Utdata
LINESTRING(10 10,100 100,100 180,150 170,190 90,150 20)
Figur
Geometry figure for visual-st-simplifyvw-03

Förenkling av en polygon.

Kod
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);
Utdata
POLYGON((20 20,20 120,80 180,160 130,180 30,20 20))
Figur
Geometry figure for visual-st-simplifyvw-04