- 类别:
ST_COLLECT¶
有两种形式的 ST_COLLECT:
标量:此函数将两个 GEOGRAPHY 对象合二为一。
聚合:此函数将一列中的所有 GEOGRAPHY 对象合并为一个 GEOGRAPHY 对象。
语法¶
Scalar:
ST_COLLECT( <geography_expression_1> , <geography_expression_2> )
Aggregate:
ST_COLLECT( <geography_expression_1> )
实参¶
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)' );此查询调用 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" | | } | +------------------------+此查询调用 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" | | } | } | +------------------------+------------------------+此查询首先对每列调用 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" | | } | +--------------------------------------------+