從其他Geometry對象的collection返回一個具體的Geometry值(對應的對象)。
文法
geometry ST_Collect(geometry set g1Field);
geometry ST_Collect(geometry g1 , geometry g2);
geometry ST_Collect(geometry[] g1Array);
參數
參數名稱 | 描述 |
g1Field | Geometry對象在資料集中的欄位。 |
g1 | 第一個Geometry對象。 |
g2 | 第二個Geometry對象。 |
g1Array | Geometry對象數組。 |
描述
- 輸出類型可以是Multi或GeometryCollection類型。該函數有兩種形式:
- 形式1:輸入參數是兩個Geometry對象。該函數會根據輸入的兩個Geometry對象,返回一個Collection對象,輸出類型可能是Multi或GeometryCollection類型。
- 形式2:是一個彙總功能函數,輸入對象是一個Geometry對象的集合,返回一個ST_Geometry函數值對應的Geometry對象。
- 該函數支援CircularString和CurveGeometry對象,但可能不會返回預期的一個MultiCurve類型或Multi類型對象。
- 函數ST_Collect 和函數ST_Union 經常可以互換使用,除了ST_Collect將始終返回GeometryCollection或Multi類型,而ST_Union溶解邊界時可能返回單個Geometry對象。 ST_Union還將在節點相交處分割LineString,而ST_Collect則僅僅返回為MultiLineString。
- 一般來說函數ST_Collect要比函數ST_Union快很多,因為ST_Collect 函數不會去分解輸入Geometry對象的邊界或者檢查一個MultiPolygon對象是否有重疊部分。它僅僅是把單個的Geometry對象組合成一個Multi類型對象,或者將Multi類型對象組合成一個GeometryCollection集合對象。
- 為了阻止函數ST_Collect把Multi類型對象變成GeometryCollection類型對象,使用者可以使用如下小技巧:利用函數ST_Dump把Multi類型對象轉換成單個Geometry對象,再重新彙總他們。
樣本
- 輸出MULTI類型對象:
SELECT ST_AsText(ST_Collect('POINT(0 0)'::geometry, 'POINT(0 1)'::geometry)); st_astext --------------------- MULTIPOINT(0 0,0 1) (1 row)
- 輸出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 row)
- 彙總資料集:
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.7071. .06781186545,0 1,0.707106781186544 0.707106781186551,1 0) (1 row)