名前

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()と同じ方法でデータリストの操作を行うことを意味します.

非集計関数版: この関数は二つの入力ジオメトリの結合したジオメトリを返します.出力型はMULTI系,非MULTI系またはGEOMETRYCOLLECTIONです.

[注意]

ST_CollectとST_Unionはしばしば交換して使うことができます. ST_Unionはバウンダリを更新しようとするので,一般的にST_Collectよりも桁違いに遅く動きます. ST_Collectは,単に,シングルジオメトリをMULTI系ジオメトリに巻き込み,MULTI系ジオメトリまたはジオメトリ型混在の集合をジオメトリコレクションに巻き込む,ということを行っているだけです.

GEOSモジュールで実行しています

ご注意: この関数は以前は,"Union"から改名してGeomUnion()と呼ばれていました.UNIONはSQLの予約語であるためです.

初出バージョン: 1.4.0 - ST_Unionが強化されました.ST_Union(geomarray)が導入され,また,PostgreSQL内での集計が速くなりました.GEOS 3.1.0以上を使用している場合は,ST_Unionは,http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.htmlに記述がある,Cascaded Unionアルゴリズムを使います.

このメソッドは OpenGIS Simple Features Implementation Specification for SQL 1.1.を実装するものです. s2.1.1.3

[注意]

集約関数版は,OGC仕様に明示的に定義されていません.

このメソッドはSQL/MM仕様の実装です. SQL-MM 3: 5.1.19 the z-index (elevation) when polygons are involved.

集約関数版の例

SELECT stusps,
	   ST_Multi(ST_Union(f.the_geom)) as singlegeom
	 FROM sometable As f
GROUP BY stusps
			  

Non-Aggregate example

SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'),
	ST_GeomFromText('POINT(-2 3)') ) )

st_astext
----------
MULTIPOINT(-2 3,1 2)


SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'),
		ST_GeomFromText('POINT(1 2)') ) );
st_astext
----------
POINT(1 2)

--3d example - sort of supports 3d (and with mixed dimensions!)
SELECT ST_AsEWKT(st_union(the_geom))
FROM
(SELECT ST_GeomFromEWKT('POLYGON((-7 4.2,-7.1 4.2,-7.1 4.3,
-7 4.2))') as the_geom
UNION ALL
SELECT ST_GeomFromEWKT('POINT(5 5 5)') as the_geom
UNION ALL
	SELECT ST_GeomFromEWKT('POINT(-2 3 1)') as the_geom
UNION ALL
SELECT ST_GeomFromEWKT('LINESTRING(5 5 5, 10 10 10)') as the_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 example not mixing dimensions
SELECT ST_AsEWKT(st_union(the_geom))
FROM
(SELECT ST_GeomFromEWKT('POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2,
-7 4.2 2))') as the_geom
UNION ALL
SELECT ST_GeomFromEWKT('POINT(5 5 5)') as the_geom
UNION ALL
	SELECT ST_GeomFromEWKT('POINT(-2 3 1)') as the_geom
UNION ALL
SELECT ST_GeomFromEWKT('LINESTRING(5 5 5, 10 10 10)') as the_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))

			  

関連情報

ST_Collect