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。
数组变体:返回一个几何图形,该几何图形是一个几何图形数组的并集。
聚合变体:返回一个几何图形,该几何图形是一行集几何图形的并集。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”重命名,因为 UNION 是 SQL 保留字。
增强:3.1.0 接受 gridSize 参数。
需要 GEOS >= 3.9.0 才能使用 gridSize 参数
已更改:3.0.0 不依赖于 SFCGAL。
可用性:1.4.0 - ST_Union 已增强。引入了 ST_Union(geomarray),并且在 PostgreSQL 中也更快地收集聚合。
此方法实现了 SQL 1.1 的 OGC 简单要素实施规范。
s2.1.1.3
OGC SPEC 中未明确定义聚合版本。 |
此方法实现了 SQL/MM 规范。
SQL-MM 3:5.1.19 当涉及多边形时的 z 索引(高程)。
此函数支持 3d,并且不会删除 z 索引。
但是,结果仅使用 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))