Name

ST_SimplifyPreserveTopology — Returnerar en förenklad och giltig representation av en geometri med hjälp av Douglas-Peucker-algoritmen.

Synopsis

geometry ST_SimplifyPreserveTopology(geometry geom, float tolerance);

Beskrivning

Beräknar en förenklad representation av en geometri med hjälp av en variant av Douglas-Peucker-algoritmen som begränsar förenklingen för att säkerställa att resultatet har samma topologi som indata. Förenklingstoleransen är ett avståndsvärde, i enheterna för indatans SRS. Förenklingen tar bort toppar som ligger inom toleransavståndet för det förenklade linjeverket, så länge som topologin bevaras. Resultatet kommer att vara 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 kommer resultatet att ha samma antal ringar (skal och hål), och ringarna kommer inte att korsa varandra. Ringarnas ändpunkter kan förenklas. För linjära indata kommer resultatet att ha samma antal linjer, och linjerna kommer inte att korsa varandra om de inte gjorde det i den ursprungliga geometrin. Slutpunkterna för linjär geometri bevaras.

[Note]

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

Exempel

I samma exempel som på ST_Simplify förhindrar ST_SimplifyPreserveTopology överdriven förenkling. Cirkeln kan som mest bli en kvadrat.

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_square,
        ST_NPoints(ST_SimplifyPreserveTopology(geom, 100)) AS np100_stillsquare
FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) AS geom) AS t;

 np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_square | np100_stillsquare
-----------+-------------------+---------------------+-------------+-------------+-------------------
        49 |                33 |                  17 |           9 |           5 |                 5

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))',
    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)))',
    40);