Name

ST_CollectionExtract — Gibt bei einer Geometriesammlung eine Multi-Geometrie zurück, die nur Elemente eines bestimmten Typs enthält.

Synopsis

geometry ST_CollectionExtract(geometry collection);

geometry ST_CollectionExtract(geometry collection, integer type);

Beschreibung

Gibt bei einer Geometriesammlung eine homogene Multi-Geometrie zurück.

Wenn der Typ nicht angegeben ist, wird eine Multi-Geometrie zurückgegeben, die nur Geometrien der höchsten Dimension enthält. Polygone werden also gegenüber Linien bevorzugt, die wiederum gegenüber Punkten bevorzugt werden.

Wenn der Typ angegeben ist, wird eine Multi-Geometrie zurückgegeben, die nur diesen Typ enthält. Gibt es keine Untergeometrien des richtigen Typs, wird eine EMPTY-Geometrie zurückgegeben. Es werden nur Punkte, Linien und Polygone unterstützt. Die Typnummern sind:

  • 1 == PUNKT

  • 2 == ZEILENUMBRUCH

  • 3 == POLYGON

Bei atomaren Geometrieeingaben wird die Geometrie unverändert wiedergegeben, wenn der Eingabetyp mit dem angeforderten Typ übereinstimmt. Andernfalls ist das Ergebnis eine LEERE Geometrie des angegebenen Typs. Falls erforderlich, können diese mit ST_Multi in Multi-Geometrien umgewandelt werden.

[Warning]

MultiPolygon-Ergebnisse werden nicht auf ihre Gültigkeit geprüft. Wenn die Polygonkomponenten nebeneinander liegen oder sich überlappen, ist das Ergebnis ungültig. (Dies kann z.B. bei der Anwendung dieser Funktion auf ein ST_Split Ergebnis auftreten.) Diese Situation kann mit ST_IsValid überprüft und mit ST_MakeValid behoben werden.

Verfügbarkeit: 1.5.0

[Note]

Vor 1.5.3 gab diese Funktion atomare Eingaben unverändert zurück, unabhängig vom Typ. In 1.5.3 lieferten nicht übereinstimmende Einzelgeometrien ein NULL-Ergebnis. In 2.0.0 geben nicht übereinstimmende Einzelgeometrien ein LEERES Ergebnis des angeforderten Typs zurück.

Beispiele

Extrahieren Sie den Typ mit der höchsten Dimension:

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION( POINT(0 0), LINESTRING(1 1, 2 2) )'));
    st_astext
    ---------------
    MULTILINESTRING((1 1, 2 2))

Punkte extrahieren (Typ 1 == POINT):

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))',
        1 ));
    st_astext
    ---------------
    MULTIPOINT((0 0))

Zeilen extrahieren (Typ 2 == LINESTRING):

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))',
        2 ));
    st_astext
    ---------------
    MULTILINESTRING((0 0, 1 1), (2 2, 3 3))