ST_Union — 计算表示输入几何图形的点集并集的几何图形。
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或更高版本)
![]() | |
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
![]() | |
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))