Name

ST_SimplifyPreserveTopology — Gibt eine vereinfachte und gültige Darstellung einer Geometrie zurück, die den Douglas-Peucker-Algorithmus verwendet.

Synopsis

geometry ST_SimplifyPreserveTopology(geometry geom, float tolerance);

Beschreibung

Berechnet eine vereinfachte Darstellung einer Geometrie unter Verwendung einer Variante des Douglas-Peucker-Algorithmus, der die Vereinfachung einschränkt, um sicherzustellen, dass das Ergebnis die gleiche Topologie wie die Eingabe hat. Die Vereinfachung Toleranz ist ein Abstandswert in den Einheiten der Eingabe-SRS. Bei der Vereinfachung werden Eckpunkte entfernt, die innerhalb der Toleranzdistanz des vereinfachten Linienwerks liegen, solange die Topologie erhalten bleibt. Das Ergebnis wird gültig und einfach sein, wenn die Eingabe lautet.

Die Funktion kann mit jeder Art von Geometrie (einschließlich GeometryCollections) aufgerufen werden, aber nur Linien- und Polygonelemente werden vereinfacht. Bei polygonalen Eingaben hat das Ergebnis die gleiche Anzahl von Ringen (Schalen und Löcher), und die Ringe kreuzen sich nicht. Die Endpunkte der Ringe können vereinfacht werden. Bei linearen Eingaben hat das Ergebnis die gleiche Anzahl von Linien, und die Linien schneiden sich nicht, wenn sie dies in der ursprünglichen Geometrie nicht taten. Die Endpunkte der linearen Geometrie bleiben erhalten.

[Note]

Diese Funktion erhält keine gemeinsamen Grenzen zwischen Polygonen. Verwenden Sie ST_CoverageSimplify, wenn dies erforderlich ist.

Wird vom GEOS Modul ausgeführt

Verfügbarkeit: 1.3.3

Beispiele

Für dasselbe Beispiel wie ST_Simplify verhindert ST_SimplifyPreserveTopology eine zu starke Vereinfachung. Der Kreis kann höchstens zu einem Quadrat werden.

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

Vereinfachung einer Reihe von Linien, wobei die Topologie der sich nicht schneidenden Linien erhalten bleibt.

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);

Vereinfachung eines MultiPolygons unter Beibehaltung der Topologie von Schalen und Löchern.

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);