カテゴリ:

地理空間関数

ST_COLLECT

ST_COLLECT には2つの形式があります。

  • スカラー:この関数は、2つの GEOGRAPHY オブジェクトを1つに結合します。

  • 集計:この関数は、列内のすべての GEOGRAPHY オブジェクトを1つの GEOGRAPHY オブジェクトに結合します。

構文

Scalar:

    ST_COLLECT( <geography_expression_1> , <geography_expression_2> )

Aggregate:

    ST_COLLECT( <geography_expression_1> )

引数

地理式1

GEOGRAPHY オブジェクトです。

地理式2

GEOGRAPHY オブジェクトです。

戻り値

この関数は、 GEOGRAPHY 型の値を返します。

使用上の注意

  • g1とg2が両方ともポイントオブジェクトの場合、結果は2つのポイントを含む MultiPoint オブジェクトになります。同様に、g1とg2がどちらも LineStringオブジェクトの場合、結果は MultiLineString オブジェクトになります。その他

  • g1とg2が異なるタイプの地理空間オブジェクトである場合、または入力 GEOGRAPHY オブジェクトの少なくとも1つがコレクション(例: MultiLine、 GeometryCollection、または FeatureCollection)である場合、結果は両方を含む GeometryCollection です。

以下のクエリは、 ST_COLLECT 関数のスカラー使用と集計使用の両方を示しています。

テーブルを作成してロードします。

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))');

これは、同じ行の両方のポイントを含む MultiPoint 値を作成するスカラー関数として ST_COLLECT を呼び出します。

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

これは、同じ列のすべてのポイントを含む MultiPoint 値を作成する集計関数として ST_COLLECT を呼び出します。

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

これは最初に各列の集計関数として ST_COLLECT を呼び出して各列のすべてのポイントを含む MultiPoint 値を作成し、次にこれら2つの MultiPoint 値で ST_COLLECT を呼び出して、両方の列のポイントすべてを含む GeometryCollection を作成します。結果の GeometryCollection は階層的です。

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