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です。2つの形式があります。 ひとつめは、2つのジオメトリをまとめるものです。ふたつめは、ジオメトリの集合を取って単一のST_Geometryにまとめる集計関数です。
集計関数版: この関数は、ジオメトリの集合からGEOMETRYCOLLECTIONまたはMULTI系を返します。ST_Collect()関数はPostgreSQL用語で言うところの「集計関数」です。SUM()やMEAN()と同じ方法でデータ行での操作を行うことを意味します。たとえば、"SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN"はATTRCOLUMNの異なった値ごとに、別々のGEOMETRYCOLLECTIONを返します。
非集計関数版: この関数は、2つの入力ジオメトリをまとめたジオメトリを返します。出力タイプはMULTI系またはGEOMETRYCOLLECTIONです。
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がより多くのジオメトリをより早く扱えるよう強化されました。
この関数は3次元に対応しています。Zインデクスを削除しません。
このメソッドは曲線ストリングと曲線に対応しています このメソッドは曲線ストリングと曲線をサポートします。 ただし、MULTICURVEまたはMULTI系は期待するように返ることはなく、PostGISは現在のところこれに対応していません。
集計関数の例(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
非集計関数の例
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))