Name

ST_Union — 计算表示输入几何图形的点集并集的几何图形。

Synopsis

geometry ST_Union(geometry g1, geometry g2);

geometry ST_Union(geometry g1, geometry g2, float8 gridSize);

geometry ST_Union(geometry[] g1_array);

geometry ST_Union(geometry set g1field);

geometry ST_Union(geometry set g1field, float8 gridSize);

描述

联合输入几何图形,合并几何图形以生成没有重叠的结果几何图形。 输出可以是原子几何、多几何或几何集合。 有多种格式:

双输入格式: 返回一个几何图形,该几何图形是两个输入几何图形的并集。 如果任一输入为 NULL,则返回 NULL。

数组格式: 返回一个几何图形,该几何图形是几何图形数组的并集。

聚合函数格式: 返回一个几何图形,该几何图形是几何图形集合的并集。 ST_Union() 函数是 PostgreSQL 术语中的“聚合”函数。 这意味着它对数据行进行操作,与 SUM() 和 AVG() 函数的操作方式相同,并且与大多数聚合一样,它也会忽略 NULL 几何图形。

请参阅 ST_UnaryUnion 了解非聚合、单输入格式。

ST_Union的数组和聚合形式使用 http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.html 中引入的快速级联连接算法

可以指定 gridSize 来在固定精度空间中工作。 输入将捕捉到给定大小的网格,并在同一网格上计算结果顶点。 (需要 GEOS-3.9.0 或更高版本)

[Note]

ST_Collect 如果不要求结果不重叠,有时可以使用 ST_Collect 代替 ST_Union。 ST_Collect 通常比 ST_Union 更快,因为它不对收集的几何图形执行任何处理。

这个函数是由 GEOS 模块执行的。

ST_Union 创建 MultiLineString 并且不会将 LineString 缝合成单个 LineString。 使用ST_LineMerge缝合线串。

注意:此函数以前称为 GeomUnion(),它是从“Union”重命名的,因为 UNION 是 SQL 保留字。

增强:3.1.0 接受 gridSize 参数。

需要 GEOS >= 3.9.0 才能使用 gridSize 参数

更改:3.0.0 不依赖于 SFCGAL。

可用性:1.4.0 - ST_Union 得到增强。 PostgreSQL 中引入了 ST_Union(geomarray) 以及更快的集合聚合。

此方法实现了 SQL 1.1 的 OGC 简单功能规范。 s2.1.1.3

[Note]

OGC SPEC 中未明确定义聚合版本。

该方法实现了SQL/MM规范。 SQL-MM 3:5.1.19 涉及多边形时的 z 索引(高程)。

该函数支持 3d 并且不会丢失 z-index。 但是,结果仅使用 XY 计算。 结果 Z 值被复制、平均或插值。

示例

聚合示例

SELECT id,
       ST_Union(geom) as singlegeom
FROM sometable f
GROUP BY id;
              

非聚合示例

select ST_AsText(ST_Union('POINT(1 2)' :: geometry, 'POINT(-2 3)' :: geometry))

st_astext
----------
MULTIPOINT(-2 3,1 2)

select ST_AsText(ST_Union('POINT(1 2)' :: geometry, 'POINT(1 2)' :: geometry))

st_astext
----------
POINT(1 2)

3D 示例 - 3D 的类型(和混合维度!)

select ST_AsEWKT(ST_Union(geom))
from (
         select 'POLYGON((-7 4.2,-7.1 4.2,-7.1 4.3, -7 4.2))'::geometry geom
         union all
         select 'POINT(5 5 5)'::geometry geom
         union all
         select 'POINT(-2 3 1)'::geometry geom
         union all
         select 'LINESTRING(5 5 5, 10 10 10)'::geometry geom
     ) as foo;

st_asewkt
---------
GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 5,-7.1 4.2 5,-7.1 4.3 5,-7 4.2 5)));

不混合维度的 3D 示例

select ST_AsEWKT(ST_Union(geom))
from (
         select 'POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2, -7 4.2 2))'::geometry geom
         union all
         select 'POINT(5 5 5)'::geometry geom
         union all
         select 'POINT(-2 3 1)'::geometry geom
         union all
         select 'LINESTRING(5 5 5, 10 10 10)'::geometry geom
     ) as foo;

st_asewkt
---------
GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2,-7 4.2 2)))

--Examples using new Array construct
SELECT ST_Union(ARRAY(SELECT geom FROM sometable));

SELECT ST_AsText(ST_Union(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'),
            ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktunion;

--wktunion---
MULTILINESTRING((3 4,4 5),(1 2,3 4))