类别:

地理空间函数

ST_COLLECT

有两种形式的 ST_COLLECT:

  • 标量:此函数将两个 GEOGRAPHY 对象合二为一。

  • 聚合:此函数将一列中的所有 GEOGRAPHY 对象合并为一个 GEOGRAPHY 对象。

语法

Scalar:

    ST_COLLECT( <geography_expression_1> , <geography_expression_2> )

Aggregate:

    ST_COLLECT( <geography_expression_1> )
Copy

实参

geography_expression_1

GEOGRAPHY 对象。

geography_expression_2

GEOGRAPHY 对象。

返回

该函数返回 GEOGRAPHY 类型的值。

使用说明

  • 如果 g1 和 g2 都是 Point 对象,则结果为包含两个 Point 的 MultiPoint 对象。同样,如果 g1 和 g2 都是 LineString 对象,则结果为 MultiLineString 对象。等

  • 如果 g1 和 g2 是不同类型的地理空间对象,或者如果至少有一个输入 GEOGRAPHY 对象是集合(例如 MultiLineString、GeometryCollection 或 FeatureCollection),则结果是 GeometryCollection 包含两个输入对象。

示例

以下查询显示了 ST_COLLECT 函数的标量和聚合用法。

创建并加载表:

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

此查询调用 ST_COLLECT 作为标量函数来创建包含同一行中两个点的 MultiPoint 值:

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

此查询调用 ST_COLLECT 作为聚合函数来创建包含同一列中所有点的 MultiPoint 值:

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

此查询首先对每列调用 ST_COLLECT 作为聚合函数以创建包含每列中所有点的 MultiPoint 值,然后对这两个 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"             |
| }                                          |
+--------------------------------------------+
Copy
语言: 中文