ST_Collect — 他のジオメトリのコレクションから、指定したST_Geometry値を返します。
geometry ST_Collect(geometry set g1field);
geometry ST_Collect(geometry g1, geometry g2);
geometry ST_Collect(geometry[] g1_array);
出力タイプはMULTI系またはGEOMETRYCOLLECTIONです。二つの形式があります。 一つ目は、二つのジオメトリをまとめるものです。二つ目は、ジオメトリの集合を取って単一のST_Geometryにまとめる集約関数です。
集約関数版: この関数は、ジオメトリの集合からGEOMETRYCOLLECTIONまたはMULTI系を返します。ST_Collect()関数はPostgreSQL用語で言うところの「集約関数」です。SUM()やMEAN()と同じ方法でデータ行での操作を行うことを意味します。たとえば、"SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN"はATTRCOLUMNの異なった値ごとに、別々のGEOMETRYCOLLECTIONを返します。
非集約関数版: この関数は、二つの入力ジオメトリをまとめたジオメトリを返します。出力タイプはMULTI系またはGEOMETRYCOLLECTIONです。
![]() | |
ST_CollectとST_Unionはしばしば交換して使うことができます。ただし、ST_Collectは常にジオメトリコレクションまたはマルチ系ジオメトリを返し、ST_Unionは境界が解消される場合には、単一ジオメトリを返すことがあります。ST_Unionは複数のラインストリングについて共有ノードで分割しますが、ST_Collectはラインストリングの分割を行わず、マルチラインストリングで返します。マルチ系ジオメトリを引数に取る際にST_Collectがジオメトリコレクションを返すのを予防するためには、下の例でも示していますが、ST_Dumpを使ってマルチ系ジオメトリをシングルジオメトリに分解して、再グループ化する、という芸当で対応します。 |
Availability: 1.4.0 - ST_Collect(geometry)が導入されました。ST_Collectがより多くのジオメトリをより早く扱えるよう強化されました。
This function supports 3d and will not drop the z-index.
This method supports Circular Strings and Curves このメソッドは曲線ストリングと曲線をサポートします。 ただし、MULTICURVEまたはMULTI系は期待するように返ることはなく、PostGISは現在のところこれに対応していません。
集約関数版の例
SELECT stusps, 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非集約関数の例
SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(1 2)'),
ST_GeomFromText('POINT(-2 3)') ));
st_astext
----------
MULTIPOINT(1 2,-2 3)
-- 2次元ポイント
SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(1 2)'),
ST_GeomFromText('POINT(1 2)') ) );
st_astext
----------
MULTIPOINT(1 2,1 2)
-- 3次元ポイント
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)
-- 曲線の例
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))
-- 配列を構築して渡す新しいST_Collect
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))