Kategorien:

Geodatenfunktionen

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

Geografischer_Ausdruck_1

Ein GEOGRAPHY-Objekt.

Geografischer_Ausdruck_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. MultiLine, 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 geospatial_table_01 (g1 GEOGRAPHY, g2 GEOGRAPHY);
insert into geospatial_table_01 (g1, g2) values 
    ('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))', 'POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))');

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"             |
| }                                          |
+--------------------------------------------+