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 是 SQL 保留字,所以將其重新命名為 ST_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 索引(高度)。
此函數支援 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))