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)
;
合并输入几何图形,生成一个没有重叠的几何图形。输出可能是一个原子几何图形、一个 MultiGeometry 或一个 Geometry Collection。 有以下几种变体:
双输入变体:返回两个输入几何图形的并集。如果任一输入为 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 或更高版本)
如果不需要结果不重叠,有时可以使用 ST_Collect 代替 ST_Union。ST_Collect 通常比 ST_Union 快,因为它不对收集的几何图形执行任何处理。 |
由 GEOS 模块执行。
ST_Union 创建 MultiLineString,并且不会将 LineString 缝合为单个 LineString。使用 ST_LineMerge 来缝合 LineString。
注意:此函数以前称为 GeomUnion(),由于 UNION 是 SQL 保留字,因此重命名为 "Union"。
增强功能:3.1.0 接受 gridSize 参数。
需要 GEOS >= 3.9.0 才能使用 gridSize 参数
已更改:3.0.0 不依赖 SFCGAL。
可用性:1.4.0 - 增强了 ST_Union。引入了 ST_Union(geomarray),并在 PostgreSQL 中引入了更快的聚合收集。
此方法实现了 OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3
聚合版本未在 OGC SPEC 中明确定义。 |
此方法实现了 SQL/MM 规范。SQL-MM 3:5.1.19 当涉及多边形时的 z-index(海拔高度)。
此函数支持 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))