Kategorien:

Geodatenfunktionen

ST_SIMPLIFY

Gibt bei einem Eingabeobjekt vom Typ GEOGRAPHY oder GEOMETRY, das eine Linie oder ein Polygon repräsentiert, eine vereinfachte Approximation des Objekts zurück. Die Funktion identifiziert und entfernt ausgewählte Punkte, wodurch ein ähnliches Objekt mit weniger Punkten entsteht.

Wenn das Eingabeobjekt beispielsweise ein Polygon mit 50 Punkten ist, kann ST_SIMPLIFY ein vereinfachtes Polygon mit nur 20 Punkten zurückgeben.

Bei der Vereinfachung eines Objekts entfernt die Funktion einen Punkt nur dann, wenn der Abstand zwischen diesem Punkt und der Verbindungslinie, die bei Entfernen dieses Punktes entsteht, innerhalb der angegebenen Toleranz liegt.

Syntax

ST_SIMPLIFY( <geography_expression>, <tolerance> [ , <preserve_collapsed> ] )
ST_SIMPLIFY( <geometry_expression>, <tolerance> )
Copy

Argumente

Erforderlich:

geography_expression . OR . geometry_expression

Das zu vereinfachende GEOGRAPHY- oder GEOMETRY-Objekt.

In Abhängigkeit vom Typ des GEOGRAPHY- oder GEOMETRY-Objekts hat ST_SIMPLIFY folgende Auswirkung:

Objekttyp

Auswirkung von ST_SIMPLIFY

LineString, MultiLineString, Polygon oder MultiPolygon

ST_SIMPLIFY wendet den Vereinfachungsalgorithmus an

Punkt oder MultiPoint

ST_SIMPLIFY hat keine Auswirkung.

GeometryCollection oder FeatureCollection

Bei GEOGRAPHY-Objekten wendet ST_SIMPLIFY den Vereinfachungsalgorithmus auf jedes Objekt in der Collection an. . . Für GEOMETRY-Objekte unterstützt ST_SIMPLIFY diese Typen nicht.

tolerance

Der maximale Abstand in Metern zwischen einem Punkt und der Verbindungslinie, die durch Entfernen des Punkts entsteht. Wenn der Abstand den Toleranzwert für einen Punkt überschreitet, behält ST_SIMPLIFY diesen Punkt im vereinfachten Objekt bei.

Optional:

preserve_collapsed

(Nur bei GEOGRAPHY-Objekten) Wenn TRUE, werden Objekte beibehalten, die angesichts der Toleranz sonst zu klein wären.

Wenn beispielsweise preserve_collapsed auf FALSE gesetzt ist und tolerance den Wert 10 (Meter) hat, wird eine 1 m lange Linie im vereinfachten Objekt auf einen Punkt reduziert. Wenn preserve_collapsed auf TRUE gesetzt ist, bleibt die Linie im vereinfachten Objekt erhalten.

Standard: FALSE.

Rückgabewerte

Die Funktion gibt einen Wert vom Typ GEOGRAPHY oder GEOMETRY zurück.

Beispiele

GEOGRAPHY-Beispiele

In den Beispielen in diesem Abschnitt wird die Ausgabe im WKT-Format angezeigt:

alter session set GEOGRAPHY_OUTPUT_FORMAT='WKT';
Copy

Das folgende Beispiel gibt ein vereinfachtes LineString-Objekt zurück, das weniger Punkte als das ursprüngliche LineString-Objekt hat. In dem vereinfachten Objekt wird ein Punkt weggelassen, wenn der Abstand zwischen dem Punkt und der Verbindungslinie, die bei Entfernen des Punktes entsteht, weniger als 1.000 Meter beträgt.

SELECT ST_SIMPLIFY(
    TO_GEOGRAPHY('LINESTRING(-122.306067 37.55412, -122.32328 37.561801, -122.325879 37.586852)'),
    1000);
+----------------------------------------------------------------------------------------------------+
| ST_SIMPLIFY(                                                                                       |
|     TO_GEOGRAPHY('LINESTRING(-122.306067 37.55412, -122.32328 37.561801, -122.325879 37.586852)'), |
|     1000)                                                                                          |
|----------------------------------------------------------------------------------------------------|
| LINESTRING(-122.306067 37.55412,-122.325879 37.586852)                                             |
+----------------------------------------------------------------------------------------------------+
Copy

GEOMETRY-Beispiele

In den Beispielen in diesem Abschnitt wird die Ausgabe im WKT-Format angezeigt:

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='WKT';
Copy

Das folgende Beispiel gibt ein vereinfachtes LineString-Objekt zurück, das weniger Punkte als das ursprüngliche LineString-Objekt hat. In dem vereinfachten Objekt wird ein Punkt weggelassen, wenn die Entfernung zwischen dem Punkt und der Verbindungslinie, die bei Entfernen des Punktes entsteht, weniger als 500 Meter beträgt.

SELECT ST_SIMPIFY(
  TO_GEOMETRY('LINESTRING(1100 1100, 2500 2100, 3100 3100, 4900 1100, 3100 1900)'),
  500);

+----------------------------------------------------------------------------------------------------+
| ST_SIMPLIFY(TO_GEOMETRY('LINESTRING(1100 1100, 2500 2100, 3100 3100, 4900 1100, 3100 1900)'), 500) |
|----------------------------------------------------------------------------------------------------|
| LINESTRING(1100 1100,3100 3100,4900 1100,3100 1900)                                                |
+----------------------------------------------------------------------------------------------------+
Copy

Das folgende Beispiel vereinfacht eine Ellipse mit ursprünglich 36 Scheitelpunkten zu einer Form mit 16 oder 10 Scheitelpunkten, abhängig vom tolerance-Argument:

SELECT ST_NUMPOINTS(geom) AS numpoints_before,
  ST_NUMPOINTS(ST_Simplify(geom, 0.5)) AS numpoints_simplified_05,
  ST_NUMPOINTS(ST_Simplify(geom, 1)) AS numpoints_simplified_1
  FROM
  (SELECT ST_BUFFER(to_geometry('LINESTRING(0 0, 1 1)'), 10) As geom);

+------------------+-------------------------+------------------------+
| NUMPOINTS_BEFORE | NUMPOINTS_SIMPLIFIED_05 | NUMPOINTS_SIMPLIFIED_1 |
|------------------+-------------------------+------------------------|
|               36 |                      16 |                     10 |
+------------------+-------------------------+------------------------+
Copy