複数のジオメトリオブジェクトの幾何学的和(UNION)を計算し、共有境界を解消し、重複する領域を単一の出力ジオメトリにマージします。
構文
geometry ST_Union(geometry set g1Field);
geometry ST_Union(geometry g1 , geometry g2);
geometry ST_Union(geometry[] g1Array);
geometry ST_Union(geometry set g1Field, float8 gridsize);
geometry ST_Union(geometry set g1Field, cstring options);
geometry ST_Union(geometry set g1Field, float8 gridsize, cstring options);
geometry ST_Union(geometry[] g1Array, float8 gridsize);
geometry ST_Union(geometry[] g1Array, cstring options);
geometry ST_Union(geometry[] g1Array, float8 gridsize, cstring options);パラメーター
| パラメーター | 説明 |
|---|---|
g1Field | UNION 操作対象のデータセット内のジオメトリ列です。集計関数として使用される場合に指定します。 |
g1 | 最初のジオメトリオブジェクトです。 |
g2 | 2 番目のジオメトリオブジェクトです。 |
g1Array | UNION 操作対象のジオメトリオブジェクトの配列です。 |
gridsize | UNION 操作中に頂点をスナップするグリッドセルのサイズです。同一グリッドセル内の頂点はマージされます。デフォルト値: -1.0(無効)。 |
options | 並列計算を有効化し、並列処理の次数(1~64)を設定する JSON 文字列です。例: '{"parallel": 4}' は、ワーカー数 4 で並列計算を有効化します。デフォルト値: '{}'(逐次処理)。 |
説明
ST_Union には以下の 2 つのバージョンがあります。
バージョン 1 — 2 つのジオメトリオブジェクト(
g1、g2)を引数に取り、その UNION を MULTI、NON-MULTI、または GeometryCollection として返します。いずれかの入力が NULL の場合、関数は NULL を返します。バージョン 2 — データセットの列(
g1Field)またはジオメトリオブジェクトの配列(g1Array)に対して集計関数として動作します。MULTI または NON-MULTI オブジェクトを返します。
注意事項
ST_Union と ST_Collect の比較
ST_Union は入力ジオメトリ間の境界を解消し、重複領域を検出します。一方、ST_Collect はジオメトリを単にグループ化するだけで、処理を行いません。このため、ST_Union の実行は一般に ST_Collect よりも遅くなります。
結果が非重複である必要がない場合は ST_Collect を使用してください。トポロジ的にクリーンな出力(たとえば、マージされたポリゴンの総面積を算出する場合など)が必要な場合は、ST_Union を使用してください。
例
ST_Union と ST_Collect の比較
以下のクエリでは、隣接する 2 つのポリゴンに対して両関数を実行しています。ST_Union は共有エッジを解消しますが、ST_Collect はそれを保持します。
SELECT ST_Union(g1,g2),ST_Collect(g1,g2)
from (select 'POLYGON((0 0,1 0,1 2,0 2,0 0))'::geometry as g1,'POLYGON((1 0,3 0,3 1,1 1,1 0))'::geometry as g2) as t;

gridsize および options の使用
以下の例では、オプションの gridsize および options パラメーターを指定した集計関数としての使用方法を示します。
-- gridsize パラメーターを指定します。
select st_area(st_union(geom, 0.005)) from tableA;
-- options パラメーターを指定します。
select st_area(st_union(geom, '{"parallel": 4}'::cstring)) from tableA;
-- gridsize および options パラメーターを同時に指定します。
select st_area(st_union(geom, 0.005, '{"parallel": 4}'::cstring)) from tableA;