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。

数组变体: 返回一个几何体,它是几何体数组的并集。

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

看见 ST_UnaryUnion 用于非聚合、单输入变量。

ST_UNION数组和集合变量使用中介绍的快速级联UNION算法 http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.html

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

[Note]

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

由GEOS模块执行。

ST_UNION将创建多重线串,而不会将线串缝合成单个线串。使用 ST_LineMerge 缝制线条。

注意:该函数以前称为GeomUnion(),因为Union是一个SQL保留字,所以将其从“Union”重命名。

增强:3.1.0接受GRIDSIZE参数-需要GEOS > =3.9.0

已更改:3.0.0不依赖于SFCGAL。

可用性:1.4.0-ST_Union得到增强。引入了ST_UNION(地理阵列),并在PostgreSQL中实现了更快的聚合收集。

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

[Note]

OGC规范中没有明确定义聚合版本。

This method implements the SQL/MM specification. SQL-MM 3:5.1.19涉及多边形时的z索引(高程)。

This function supports 3d and will not drop the 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))

              

另请参阅

ST_Collect, ST_UnaryUnion, ST_MemUnion, ST_Intersection, ST_Difference, ST_SymDifference