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