ST_Union — ジオメトリの結合の点集合を表現するジオメトリを返します。
geometry ST_Union(geometry set g1field);
geometry ST_Union(geometry g1, geometry g2);
geometry ST_Union(geometry[] g1_array);
MULTI系、単一ジオメトリ、ジオメトリコレクションのいずれでも出力されます。二つの形式があります。一つ目は、二つのジオメトリを結合して、インタセクトしている領域の無い新しいジオメトリを返します。二つ目は、ジオメトリの集合を結合して、インタセクトしている領域の無い単一のST_Geometryを返すものです。
集約関数版: この関数は、ジオメトリの集合から、MULTI系ジオメトリまたは非MULTI系ジオメトリを返します。ST_Union()関数は、PostgreSQL用語で言うところの「集約関数」です。SUM()やMEAN()と同じ方法でデータリストの操作を行い、NULLジオメトリを無視することを意味します。
非集約関数版: この関数は二つの入力ジオメトリの結合したジオメトリを返します。出力型はMULTI系、非MULTI系またはGEOMETRYCOLLECTIONです。入力が全てNULLならNULLを返します。
![]() | |
ST_CollectとST_Unionはしばしば交換して使うことができます。ST_Unionは境界を更新し、生成されるMULTI系ジオメトリがインタセクトした領域を持たないようにするため、一般的にST_Collectよりも桁違いに遅く動きます。 |
ST_Unionではhttp://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.htmlにある高速なカスケード結合アルゴリズムが使われています。
GEOSモジュールで実現しています。
ご注意: この関数は以前は、"Union"から名称変更してGeomUnion()と呼ばれていました。UNIONはSQLの予約語であるためです。
Availability: 1.4.0 - ST_Unionが機能強化されました。ST_Union(geomarray)が導入され、PostgreSQLの高速なコレクションの集約が導入されました。
Changed: 3.0.0 SFCGAL非依存になりました。
This method implements the OpenGIS Simple Features
Implementation Specification for SQL 1.1. s2.1.1.3
![]() | |
集約関数版は、OGC仕様に明示的に定義されていません。 |
This method implements the SQL/MM specification. SQL-MM 3: 5.1.19 ポリゴンが含まれる時、Z値 (標高)を持ちます。
集約関数版の例
SELECT stusps,
ST_Union(f.geom) as singlegeom
FROM sometable f
GROUP BY stusps
非集約関数の例
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)3次元の例 - 3次元 (かつ混合次元)の種類
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)));
3次元の例 - 混合次元なし
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 the_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))