Name

ST_Split — Gibt eine Sammlung von Geometrien zurück, die durch Aufteilung einer Geometrie durch eine andere Geometrie entstanden sind.

Übersicht

geometry ST_Split(geometry input, geometry blade);

Beschreibung

Die Funktion unterstützt die Aufteilung eines LineStrings durch eine (Multi)Point-, (Multi)LineString- oder (Multi)Polygon-Grenze, oder eines (Multi)Polygons durch einen LineString. Wenn ein (Multi)Polygon als Klinge verwendet wird, werden seine linearen Komponenten (die Begrenzung) für die Aufteilung der Eingabe verwendet. Die Ergebnisgeometrie ist immer eine Sammlung.

Diese Funktion ist in gewisser Weise das Gegenteil von ST_Union. Die Anwendung von ST_Union auf die zurückgegebene Sammlung sollte theoretisch die ursprüngliche Geometrie ergeben (obwohl dies aufgrund numerischer Rundungen nicht unbedingt der Fall ist).

[Anmerkung]

Wenn sich Eingabe und Schaufel aufgrund von Problemen mit der numerischen Präzision nicht überschneiden, wird die Eingabe möglicherweise nicht wie erwartet geteilt. Um dies zu vermeiden, kann es notwendig sein, die Eingabe zuerst an der Klinge zu fangen, indem Sie ST_Snap mit einer kleinen Toleranz verwenden.

Verfügbarkeit: 2.0.0 erfordert GEOS

Verbessert: In Version 2.2.0 wurde die Unterstützung für die Aufteilung einer Linie durch eine Mehrlinien-, eine Mehrpunkt- oder eine (Mehr-)Polygonbegrenzung eingeführt.

Verbessert: In Version 2.5.0 wurde die Unterstützung für die Aufteilung eines Polygons durch eine Mehrlinie eingeführt.

Beispiele

Split a circular polygon by a diagonal line.

Code
SELECT
         ST_Split(
           ST_Buffer('POINT(100 90)'::geometry, 50),
           'LINESTRING(10 10,190 190)'::geometry
         );
Ausgabe von Rastern
GEOMETRYCOLLECTION(POLYGON((150 90,149 80.2,146.2 70.9,141.6 62.2,135.4 54.6,127.8 48.4,119.1 43.8,109.8 41,100 40,90.2 41,80.9 43.8,72.2 48.4,64.6 54.6,60.1 60.1,129.9 129.9,135.4 125.4,141.6 117.8,146.2 109.1,149 99.8,150 90)), POLYGON((60.1 60.1,58.4 62.2,53.8 70.9,51 80.2,50 90,51 99.8,53.8 109.1,58.4 117.8,64.6 125.4,72.2 131.6,80.9 136.2,90.2 139,100 140,109.8 139,119.1 136.2,127.8 131.6,129.9 129.9,60.1 60.1)))
Figure
Geometry figure for visual-st-split-01

Teilt einen MultiLineString durch einen Punkt, wobei der Punkt genau auf beiden LineString-Elementen liegt.

Code
SELECT ST_Split('MULTILINESTRING((10 10,190 190),(15 15,30 30,100 90))',
    ST_Point(30, 30));
Ausgabe von Rastern
GEOMETRYCOLLECTION(
    LINESTRING(10 10,30 30),
    LINESTRING(30 30,190 190),
    LINESTRING(15 15,30 30),
    LINESTRING(30 30,100 90)
)
Figure
Geometry figure for visual-st-split-02

Aufteilung eines LineString durch einen Punkt, wobei der Punkt nicht genau auf der Linie liegt. Zeigt die Verwendung von ST_Snap, um die Linie an dem Punkt zu fangen, damit sie geteilt werden kann.

Code
WITH data AS (SELECT
  'LINESTRING(0 0,100 100)'::geometry AS line,
  'POINT(51 50)':: geometry AS point
)
SELECT ST_Split(ST_Snap(line, point, 1), point) AS snapped_split,
       ST_Split(line, point) AS not_snapped_not_split
       FROM data;
Ausgabe von Rastern
-[ RECORD 1 ]---------
snapped_split         | GEOMETRYCOLLECTION(LINESTRING(0 0,51 50), LINESTRING(51 50,100 100))
not_snapped_not_split | GEOMETRYCOLLECTION(LINESTRING(0 0,100 100))
Figure
Geometry figure for visual-st-split-03

Siehe auch

ST_Snap, ST_AsBinary