Name

ST_Simplify — Gibt eine vereinfachte Darstellung einer Geometrie unter Verwendung des Douglas-Peucker-Algorithmus zurück.

Synopsis

geometry ST_Simplify(geometry geom, float tolerance);

geometry ST_Simplify(geometry geom, float tolerance, boolean preserveCollapsed);

Beschreibung

Berechnet eine vereinfachte Darstellung einer Geometrie unter Verwendung des Douglas-Peucker-Algorithmus. Die Vereinfachung Toleranz ist ein Abstandswert, in den Einheiten der Eingabe SRS. Bei der Vereinfachung werden Eckpunkte entfernt, die innerhalb der Toleranzdistanz des vereinfachten Liniennetzes liegen. Das Ergebnis kann ungültig sein, auch wenn die Eingabe gültig ist.

Die Funktion kann mit jeder Art von Geometrie (einschließlich GeometryCollections) aufgerufen werden, aber nur Linien- und Polygonelemente werden vereinfacht. Die Endpunkte der linearen Geometrie bleiben erhalten.

Das Kennzeichen preserveCollapsed bewahrt kleine Geometrien, die andernfalls bei der angegebenen Toleranz entfernt werden würden. Wenn zum Beispiel eine 1 m lange Linie mit einer Toleranz von 10 m vereinfacht wird, verschwindet die Linie nicht, wenn preserveCollapsed true ist. Dieses Flag ist für Rendering-Zwecke nützlich, um zu verhindern, dass sehr kleine Merkmale aus einer Karte verschwinden.

[Note]

Die zurückgegebene Geometrie kann ihre Einfachheit verlieren (siehe ST_IsSimple), die Topologie wird möglicherweise nicht beibehalten, und polygonale Ergebnisse können ungültig sein (siehe ST_IsValid). Verwenden Sie ST_SimplifyPreserveTopology, um die Topologie zu erhalten und die Gültigkeit sicherzustellen.

[Note]

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

Verfügbarkeit: 1.2.2

Beispiele

Ein zu stark vereinfachter Kreis wird zu einem Dreieck, mittelmäßig vereinfacht zum Achteck:

SELECT ST_Npoints(geom) AS np_before,
       ST_NPoints(ST_Simplify(geom, 0.1)) AS np01_notbadcircle,
       ST_NPoints(ST_Simplify(geom, 0.5)) AS np05_notquitecircle,
       ST_NPoints(ST_Simplify(geom, 1)) AS np1_octagon,
       ST_NPoints(ST_Simplify(geom, 10)) AS np10_triangle,
       (ST_Simplify(geom, 100) is null) AS  np100_geometrygoesaway
  FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As geom) AS t;

 np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_triangle | np100_geometrygoesaway
-----------+-------------------+---------------------+-------------+---------------+------------------------
        49 |                33 |                  17 |           9 |             4 | t

Vereinfachung einer Reihe von Linien. Linien können sich nach der Vereinfachung kreuzen.

SELECT ST_Simplify(
  '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. Polygonale Ergebnisse können ungültig sein.

SELECT ST_Simplify(
  '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);