名称

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:接受几何行集的聚合函数。

[Note]

如果任何输入几何是集合(Multi* 或 GeometryCollection),则 ST_Collect 返回 GeometryCollection(因为这是唯一可以包含嵌套集合的类型)。为了防止这种情况,请在子查询中使用 ST_Dump 将输入集合扩展到其原子元素(见下面的示例)。

[Note]

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

另请参见

ST_DumpST_Union