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_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
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))