ST_Collection - Amazon Redshift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

ST_Collection

ST_Collection 有两个变体。一个接受两个几何体,另一个接受聚合表达式。

ST_Collec 的第一个变体从输入几何体创建几何体。输入几何体的顺序将保留。此变体的工作方式如下所示:

  • 如果两个输入几何体都是点,则返回MULTIPOINT具有两个点的 。

  • 如果两个输入几何体都是线串,则返回MULTILINESTRING具有两个线串的 。

  • 如果两个输入几何体都是多边形,则返回MULTIPOLYGON具有两个多边形的 。

  • 否则,将返回GEOMETRYCOLLECTION具有两个输入几何体的 。

ST_Collec 的第二个变体从几何体列中的几何体创建几何体。几何体没有确定的返回顺序。指定 WITHIN GROUP (ORDER BY ...) 子句以指定返回的几何体的顺序。此变体的工作方式如下所示:

  • 如果输入聚合表达式中的所有非 NULL 行都是 个点,则返回一个包含聚合表达式中的所有点的多点。

  • 如果聚合表达式中的所有非 NULL 行都是线串,则返回一个包含聚合表达式中所有线串的多线串。

  • 如果聚合表达式中的所有非 NULL 行都是多边形,则返回在聚合表达式中包含所有多边形的多边形。

  • 否则,将返回GEOMETRYCOLLECTION包含聚合表达式中所有几何体的 。

Syntax

ST_Collect(geom1, geom2)
ST_Collect(aggregate_expression) [WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]

Arguments

geom1

一个 GEOMETRY 数据类型的值,或一个计算结果为 GEOMETRY 类型的表达式。

geom2

一个 GEOMETRY 数据类型的值,或一个计算结果为 GEOMETRY 类型的表达式。

aggregate_expression

数据类型的列GEOMETRY或计算结果为 GEOMETRY 类型的表达式。

[WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]

一个可选子句,用于指定聚合值的排序顺序。ORDER BY 子句包含排序表达式的列表。排序表达式是类似于查询选择列表中的有效排序表达式的表达式,例如列名称。您可以指定升序 (ASC) 或降序 (DESC)。默认值为 ASC

返回类型

GEOMETRY 子类型 MULTIPOINTMULTILINESTRINGMULTIPOLYGONGEOMETRYCOLLECTION

返回的几何体的空间参考系统标识符 (SRID) 值是输入几何体的 SRID 值。

如果 geom1geom2 都为 null,则返回 null。

如果 aggregate_expression 的所有行都为 null,则返回 null。

如果 geom1 为 null,则返回 geom2 的副本。同样,如果 geom2 为 null,则返回 geom1 的副本。

如果 geom1geom2 具有不同的 SRID 值,则返回一个错误。

如果 aggregate_expression 中的两个几何体具有不同的 SRID 值,则返回一个错误。

如果返回的几何体大于 的最大大小GEOMETRY,则返回一个错误。

Examples

以下 SQL 返回包含两个输入几何体的几何体集合。

SELECT ST_AsText(ST_Collect(ST_GeomFromText('LINESTRING(0 0,1 1)'), ST_GeomFromText('POLYGON((10 10,20 10,10 20,10 10))')));
st_astext ----------- GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),POLYGON((10 10,20 10,10 20,10 10)))

以下 SQL 将表中的所有几何体收集到几何体集合中。

WITH tbl(g) AS (SELECT ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT NULL::geometry UNION ALL SELECT ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326)) SELECT ST_AsEWKT(ST_Collect(g)) FROM tbl;
st_astext ----------- SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,10 0),MULTIPOINT((13 4),(8 5),(4 4)),POLYGON((0 0,10 0,0 10,0 0)))

以下 SQL 收集表中按 ID 列分组并按此 ID 排序的所有几何体。在此示例中,生成的几何体按 ID 进行分组,如下所示:

  • id 多点中的 1 个–点。

  • id 2 多–行字符串中的 linestrings。

  • id 3 几何体集合中的–混合子类型。

  • ID 4 多多边形中的–多边形。

  • id 5 – null,结果为 null。

WITH tbl(id, g) AS (SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry) SELECT id, ST_AsEWKT(ST_Collect(g)) FROM tbl GROUP BY id ORDER BY id;
id | st_asewkt ----+----------------------------------------------------------------------------------------------------------- 1 | SRID=4326;MULTIPOINT((1 2),(4 5)) 2 | SRID=4326;MULTILINESTRING((0 0,10 0),(10 0,20 -5)) 3 | SRID=4326;GEOMETRYCOLLECTION(MULTIPOINT((13 4),(8 5),(4 4)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))) 4 | SRID=4326;MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((20 20,20 30,30 20,20 20))) 5 |

以下 SQL 从几何体集合中的表收集所有几何体。结果按 降序排序id,然后基于其最小和最大 x 坐标按字母顺序排序。

WITH tbl(id, g) AS ( SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry) SELECT ST_AsEWKT(ST_Collect(g) WITHIN GROUP (ORDER BY id DESC, ST_XMin(g), ST_XMax(g))) FROM tbl;
st_asewkt --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SRID=4326;GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),POLYGON((20 20,20 30,30 20,20 20)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5)),MULTIPOINT((13 4),(8 5),(4 4)),LINESTRING(0 0,10 0),LINESTRING(10 0,20 -5),POINT(1 2),POINT(4 5)