名前

ST_Collect — 他のジオメトリのコレクションから,指定したST_Geometry値を返します.

概要

geometry ST_Collect(geometry set g1field);

geometry ST_Collect(geometry g1, geometry g2);

geometry ST_Collect(geometry[] g1_array);

説明

出力型はMULTI系またはジオメトリコレクションです.二つの形式があります. 一つ目は,二つのジオメトリをまとめるものです.二つ目は,ジオメトリの集合を取って単一のST_Geometryにまとめる集計関数です.

集計関数版: この関数は,ジオメトリの集合からジオメトリコレクションまたはMULTI系を返します. ST_Collect()関数はPostgreSQL用語で言うところの「集計関数」です.SUM()やMEAN()と同じ方法でデータ行での操作を行うことを意味します.たとえば,"SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN"はATTRCOLUMNの異なった値ごとに,別々のジオメトリコレクションを返します.

非集計関数版: この関数は,二つの入力ジオメトリをまとめたジオメトリを返します.出力型はMULTI系またはジオメトリコレクションです.

[注意]

ST_CollectとST_Unionはしばしば交換して使うことができます. ST_Collectはバウンダリを更新しようとしないので,一般的にST_Unionよりも桁違いに早く動きます. ST_Collectは,単に,シングルジオメトリをMULTI系ジオメトリに巻き込み,MULTI系ジオメトリまたはジオメトリ型混在の集合をジオメトリコレクションに巻き込む,ということを行っているだけです.不幸なことに,GISツールはジオメトリコレクションを十分にサポートしていません.MULTI系ジオメトリを集める時にST_Collectがジオメトリコレクションを返すのを防ぐために,次に示すように,ST_DumpでMULTI系ジオメトリをシングル系ジオメトリに展開したうえで再グループ化するというトリックを使うことができます.

初出バージョン: 1.4.0 - ST_Collect(geometry)が導入されました.ST_Collectがより多くのジオメトリをより早く扱えるよう強化されました.

この関数は三次元をサポートします.Zインデクスを削除しません.

このメソッドは曲線ストリングと曲線をサポートします. ただし,マルチカーブまたはMULTI系は期待するように返ることはなく,PostGISは現在のところこれらをサポートしていません.

集計関数の例

Thread ref: http://postgis.refractions.net/pipermail/postgis-users/2008-June/020331.html
SELECT stusps,
	   ST_Multi(ST_Collect(f.the_geom)) as singlegeom
	 FROM (SELECT stusps, (ST_Dump(the_geom)).geom As the_geom
				FROM
				somestatetable ) As f
GROUP BY stusps

Non-Aggregate example

Thread ref: http://postgis.refractions.net/pipermail/postgis-users/2008-June/020331.html
SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(1 2)'),
	ST_GeomFromText('POINT(-2 3)') ));

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

--Collect 2 d points
SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(1 2)'),
		ST_GeomFromText('POINT(1 2)') ) );

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

--Collect 3d points
SELECT ST_AsEWKT(ST_Collect(ST_GeomFromEWKT('POINT(1 2 3)'),
		ST_GeomFromEWKT('POINT(1 2 4)') ) );

		st_asewkt
-------------------------
 MULTIPOINT(1 2 3,1 2 4)

 --Example with curves
SELECT ST_AsText(ST_Collect(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'),
ST_GeomFromText('CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)')));
																st_astext
------------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(CIRCULARSTRING(220268 150415,220227 150505,220227 150406),
 CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))

--New ST_Collect array construct
SELECT ST_Collect(ARRAY(SELECT the_geom FROM sometable));

SELECT ST_AsText(ST_Collect(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'),
			ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktcollect;

--wkt collect --
MULTILINESTRING((1 2,3 4),(3 4,4 5))

関連情報

ST_Dump, ST_Union