ST_Collect — 從一組幾何物件建立 GeometryCollection 或 Multi* 幾何物件。
geometry ST_Collect(
geometry g1, geometry g2)
;
geometry ST_Collect(
geometry[] g1_array)
;
geometry ST_Collect(
geometry set g1field)
;
將幾何物件收集到一個幾何物件集合中。結果會是 Multi* 或 GeometryCollection,取決於輸入的幾何物件是否具有相同或不同的類型(同質或異質)。輸入的幾何物件在集合內保持不變。
變體 1: 接受兩個輸入幾何物件
變體 2: 接受一個幾何物件陣列
變體 3: 聚合函數接受幾何物件的資料列集合。
![]() |
|
如果任何輸入的幾何物件是集合(Multi* 或 GeometryCollection),則 ST_Collect 會傳回一個 GeometryCollection(因為這是唯一可以包含巢狀集合的類型)。為了防止這種情況,請在子查詢中使用ST_Dump 將輸入集合展開為其原子元素(請參閱以下範例)。 |
![]() |
|
ST_Collect 和 ST_Union 看起來相似,但實際上運作方式截然不同。ST_Collect 將幾何物件聚合到一個集合中,而不會以任何方式更改它們。ST_Union 會在幾何物件重疊的地方進行幾何合併,並在相交處分割線串。當它消除邊界時,可能會傳回單個幾何物件。 |
可用性:1.4.0 - 引入了 ST_Collect(geomarray)。ST_Collect 已增強,可以更快地處理更多幾何物件。
此函數支援 3D,並且不會捨棄 z 索引。
此方法支援圓弧字串和曲線。
收集 2D 點。
SELECT ST_AsText( ST_Collect( ST_GeomFromText('POINT(1 2)'), ST_GeomFromText('POINT(-2 3)') )); st_astext ---------- MULTIPOINT((1 2),(-2 3))
收集 3D 點。
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( 'CIRCULARSTRING(220268 150415,220227 150505,220227 150406)', 'CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)')); st_astext ------------------------------------------------------------------------------------ MULTICURVE(CIRCULARSTRING(220268 150415,220227 150505,220227 150406), CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))
為子查詢使用陣列建構函式。
SELECT ST_Collect( ARRAY( SELECT 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))
透過分組表格中的幾何物件來建立多個集合。
SELECT stusps, ST_Collect(f.geom) as geom FROM (SELECT stusps, (ST_Dump(geom)).geom As geom FROM somestatetable ) As f GROUP BY stusps