入力ジオメトリ オブジェクトを、入力ジオメトリの型が同一(同種)か異なる(異種)かに応じて、MULTI\* 型または GeometryCollection 型に集約します。
構文
geometry ST_Collect(geometry g1, geometry g2);
geometry ST_Collect(geometry[] g1Array);
geometry ST_Collect(geometry set g1Field);パラメーター
| パラメーター | 説明 |
|---|---|
g1 | 最初のジオメトリ オブジェクトです。 |
g2 | 2 番目のジオメトリ オブジェクトです。 |
g1Array | ジオメトリ オブジェクトの配列です。 |
g1Field | データセットから取得したジオメトリ オブジェクトのフィールドです。集計関数として ST_Collect を呼び出す場合に使用します。 |
注意事項
ST_Collect には以下の 3 つのバリエーションがあります。
バリエーション 1 — 2 入力 (
g1,g2):2 つのジオメトリ オブジェクトを結合します。両方の入力が同一のジオメトリ型である場合は MULTI\* 型を返し、型が異なる場合は GeometryCollection を返します。バリエーション 2 — 配列 (
g1Array):ジオメトリ オブジェクトの配列を単一のコレクションに結合します。バリエーション 3 — 集計 (
g1Field):集計関数として動作し、行セット内のすべてのジオメトリ オブジェクトを単一のジオメトリに集約します。
ST_Collect は CircularString および Curve オブジェクトをサポートしていますが、すべての場合において期待される MultiCurve や MULTI\* 型を返すとは限りません。
入力のいずれかが既にコレクション型(MULTI\* または GeometryCollection)である場合、ST_Collectは FLAT な MULTI\* 型ではなく、GeometryCollection を返します。これを回避するには、サブクエリ内でST_Dumpを使用して、入力コレクションを原子要素に展開した後、ST_Collectを呼び出してください。
ST_Collect と ST_Union の比較
両関数ともジオメトリ オブジェクトを結合しますが、動作は異なります。
| 動作 | ST_Collect | ST_Union |
|---|---|---|
| 境界を解消する | いいえ | はい |
| LineString の処理 | MultiLineString を返す | ノード交点で分割する |
| 戻り値の型 | MULTI\* または GeometryCollection | 単純ジオメトリを返す場合あり |
| パフォーマンス | 高速 | 低速 |
ジオメトリの境界線を統合せずにグループ化する場合は ST_Collect を使用してください。ジオメトリを単一の統合ジオメトリに溶解(マージ)する必要がある場合は、ST_Union を使用してください。
例
バリエーション 1:2 入力
同一タイプの 2 つのポイントを収集 — MULTIPOINT を返します。
SELECT ST_AsText(ST_Collect('POINT(0 0)'::geometry, 'POINT(0 1)'::geometry));結果:
st_astext
---------------------
MULTIPOINT(0 0,0 1)
(1 行)異なるタイプのジオメトリを収集 — GeometryCollection を返します。
SELECT ST_AsText(ST_Collect('POINT(0 0)'::geometry, 'LINESTRING(0 2,0 3)'::geometry));結果:
st_astext
----------------------------------------------------
GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 2,0 3))
(1 行)バリエーション 3:集計
サブクエリから取得したすべてのポイントを単一の MULTIPOINT に収集します。
SELECT ST_AsText(ST_Collect(t.geom))
FROM (
SELECT (ST_DumpPoints(st_buffer('POINT(0 0)'::geometry, 1, 'quad_segs=2'))).geom AS geom
) AS t;結果:
st_astext
----------------------------------------------------------------
MULTIPOINT(1 0,0.707106781186548 -0.707106781186547,0 -1,-0.70
7106781186546 -0.707106781186549,-1 0,-0.70710678118655 0.70710
6781186545,0 1,0.707106781186544 0.707106781186551,1 0)
(1 行)