ST_SimplifyPreserveTopology — Returnerar en förenklad och giltig representation av en geometri med hjälp av Douglas-Peucker-algoritmen.
geometry ST_SimplifyPreserveTopology(geometry geom, float tolerance);
Beräknar en förenklad representation av en geometri med hjälp av en variant av Douglas–Peucker-algoritmen som begränsar förenklingen så att resultatet har samma topologi som indata. Förenklingstoleransen tolerance är ett avståndsvärde i enheterna för indatans SRS. Förenklingen tar bort noder inom toleransavståndet från det förenklade linjearbetet så länge topologin bevaras. Resultatet är giltigt och enkelt om indata är det.
Funktionen kan anropas med alla typer av geometri, inklusive GeometryCollections, men endast linje- och polygonelement förenklas. För polygonala indata har resultatet samma antal ringar (skal och hål) och ringarna korsar inte varandra. Ringarnas ändpunkter kan förenklas. För linjära indata har resultatet samma antal linjer och linjerna korsar inte varandra om de inte gjorde det i den ursprungliga geometrin. Ändpunkterna för linjär geometri bevaras.
|
|
|
Denna funktion bevarar inte gränser som delas mellan polygoner. Använd ST_CoverageSimplify om detta krävs. |
Utförs av GEOS-modulen.
Tillgänglighet: 1.3.3
För samma exempel som ST_Simplify förhindrar ST_SimplifyPreserveTopology att geometrin försvinner.
SELECT ST_NPoints(geom) AS np_before,
ST_NPoints(ST_SimplifyPreserveTopology(geom, 0.1)) AS np01_notbadcircle,
ST_NPoints(ST_SimplifyPreserveTopology(geom, 0.5)) AS np05_notquitecircle,
ST_NPoints(ST_SimplifyPreserveTopology(geom, 1)) AS np1_octagon,
ST_NPoints(ST_SimplifyPreserveTopology(geom, 10)) AS np10_minimal,
ST_NPoints(ST_SimplifyPreserveTopology(geom, 100)) AS np100_minimal
FROM (SELECT ST_Buffer('POINT(1 3)', 10, 12) AS geom) AS t;
np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_minimal | np100_minimal
-----------+-------------------+---------------------+-------------+--------------+---------------
49 | 33 | 17 | 9 | 4 | 4
Förenkla en uppsättning linjer och bevara topologin för icke korsande linjer.
SELECT ST_SimplifyPreserveTopology('MULTILINESTRING ((20 180,20 150,50 150,50 100,110 150,150 140,170 120),(20 10,80 30,90 120),(90 120,130 130),(130 130,130 70,160 40,180 60,180 90,140 80),(50 40,70 40,80 70,70 60,60 60,50 50,50 40))'::geometry,
40);
MULTILINESTRING((20 180,50 100,110 150,170 120),(20 10,80 30,90 120),(90 120,130 130),(130 130,130 70,160 40,180 90,140 80),(50 40,70 40,80 70,60 60,50 40))
Förenkling av en multipolygon med bibehållen topologi för skal och hål.
SELECT ST_SimplifyPreserveTopology('MULTIPOLYGON (((90 110,80 180,50 160,10 170,10 140,20 110,90 110)),((40 80,100 100,120 160,170 180,190 70,140 10,110 40,60 40,40 80),(180 70,170 110,142.5 128.5,128.5 77.5,90 60,180 70)))'::geometry,
40);
MULTIPOLYGON(((90 110,80 180,10 170,20 110,90 110)),((40 80,100 100,170 180,190 70,140 10,40 80),(180 70,142.5 128.5,90 60,180 70)))