名前

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))

関連情報

ST_Dump, ST_Union