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