카테고리:

지리 공간 함수

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