- Kategorien:
ST_COLLECT¶
Es gibt zwei Formen von ST_COLLECT:
Skalar: Diese Funktion kombiniert zwei GEOGRAPHY-Objekte zu einem.
Aggregat: Diese Funktion kombiniert alle GEOGRAPHY-Objekte einer Spalte zu einem GEOGRAPHY-Objekt.
Syntax¶
Scalar:
ST_COLLECT( <geography_expression_1> , <geography_expression_2> )
Aggregate:
ST_COLLECT( <geography_expression_1> )
Argumente¶
geography_expression_1
Ein GEOGRAPHY-Objekt.
geography_expression_2
Ein GEOGRAPHY-Objekt.
Rückgabewerte¶
Gibt einen Wert vom Typ GEOGRAPHY zurück.
Nutzungshinweise¶
Wenn g1 und g2 beide Punktobjekte sind, ist das Ergebnis ein MultiPoint-Objekt, das die beiden Punkte enthält. Wenn g1 und g2 beide LineString-Objekte sind, ist das Ergebnis ein MultiLineString-Objekt. Usw.
Wenn g1 und g2 verschiedene Typen von Geodatenobjekten sind oder wenn mindestens eines der GEOGRAPHY-Eingabeobjekte ein Collection-Objekt ist (z. B. MultiLineString, GeometryCollection oder FeatureCollection), dann ist das Ergebnis ein GeometryCollection-Objekt, das beide Objekte enthält.
Beispiele¶
Die folgenden Abfragen zeigen sowohl die skalare als auch aggregierte Verwendungen der Funktion ST_COLLECT.
Erstellen und laden Sie die Tabelle:
CREATE TABLE geo3 (g1 GEOGRAPHY, g2 GEOGRAPHY); INSERT INTO geo3 (g1, g2) VALUES ( 'POINT(-180 -90)', 'POINT(-45 -45)' ), ( 'POINT( 0 0)', 'POINT(-60 -60)' ), ( 'POINT(+180 +90)', 'POINT(+45 +45)' );Dies ruft ST_COLLECT als Skalarfunktion auf, um einen MultiPoint-Wert zu erstellen, der beide Punkte in derselben Zeile enthält:
-- Scalar function: SELECT ST_COLLECT(g1, g2) FROM geo3; +------------------------+ | ST_COLLECT(G1, G2) | |------------------------| | { | | "coordinates": [ | | [ | | -180, | | -90 | | ], | | [ | | -45, | | -45 | | ] | | ], | | "type": "MultiPoint" | | } | | { | | "coordinates": [ | | [ | | 0, | | 0 | | ], | | [ | | -60, | | -60 | | ] | | ], | | "type": "MultiPoint" | | } | | { | | "coordinates": [ | | [ | | 180, | | 90 | | ], | | [ | | 45, | | 45 | | ] | | ], | | "type": "MultiPoint" | | } | +------------------------+Dies ruft ST_COLLECT als Aggregatfunktion auf, um einen MultiPoint-Wert zu erstellen, der alle Punkte einer Spalte enthält:
-- Aggregate function: SELECT ST_COLLECT(g1), ST_COLLECT(g2) FROM geo3; +------------------------+------------------------+ | ST_COLLECT(G1) | ST_COLLECT(G2) | |------------------------+------------------------| | { | { | | "coordinates": [ | "coordinates": [ | | [ | [ | | -180, | -45, | | -90 | -45 | | ], | ], | | [ | [ | | 0, | -60, | | 0 | -60 | | ], | ], | | [ | [ | | 180, | 45, | | 90 | 45 | | ] | ] | | ], | ], | | "type": "MultiPoint" | "type": "MultiPoint" | | } | } | +------------------------+------------------------+Dies ruft ST_COLLECT zuerst als Aggregatfunktion für jede Spalte auf, um MultiPoint-Werte zu erstellen, die alle Punkte in jeder Spalte enthalten, und ruft dann ST_COLLECT für diese beiden MultiPoint-Werte auf, um ein GeometryCollection-Objekt zu erstellen, das alle Punkte in beiden Spalten enthält. Das resultierende GeometryCollection-Objekt ist hierarchisch.
-- Aggregate and then Collect: SELECT ST_COLLECT(ST_COLLECT(g1), ST_COLLECT(g2)) FROM geo3; +--------------------------------------------+ | ST_COLLECT(ST_COLLECT(G1), ST_COLLECT(G2)) | |--------------------------------------------| | { | | "geometries": [ | | { | | "coordinates": [ | | [ | | -180, | | -90 | | ], | | [ | | 0, | | 0 | | ], | | [ | | 180, | | 90 | | ] | | ], | | "type": "MultiPoint" | | }, | | { | | "coordinates": [ | | [ | | -45, | | -45 | | ], | | [ | | -60, | | -60 | | ], | | [ | | 45, | | 45 | | ] | | ], | | "type": "MultiPoint" | | } | | ], | | "type": "GeometryCollection" | | } | +--------------------------------------------+