名稱

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 或更高版本)

[Note]

如果結果不需要不重疊,有時可以使用 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

[Note]

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