Name

ST_Collect — Returns a geometry from the collection of others geometries.

Synopsis

PostgreSQL

geometry ST_Collect(bytea GeomA, bytea GeomB);

geometry ST_Collect(bytea[] Geometry_Array);

geometry ST_Collect(bytea Aggregate);

H2

geometry ST_Collect(bytea GeomA, bytea GeomB);

geometry ST_Collect(bytea[] Geometry_Array);

geometry ST_CollectAgg(bytea Aggregate);

Alias

Collect

Description

Returns a geometry from the collection of others geometries. The resulting geometry can be GEOMETRYCOLLECTION or MULTI* type.

This function has three versions:

  1. Collects 2 geometries.

  2. Collect an array of geometries.

  3. Collect an aggregate. An aggregate function computes a single result from multiple input rows.

[Note]

ST_Collect function can return invalid geometries

A,B
ST_Collect(A,B) returns Invalid Geometry
SELECT ST_ISValid(a), ST_IsValidReason(a), ST_AsEWKT(a) FROM 
ST_Collect(ST_GeomFromText('POLYGON ((10 30, 10 70, 60 70, 60 30, 10 30))'),
 ST_GeomFromText('POLYGON((40 50, 40 80, 70 80, 70 50, 40 50))')) as a;

--Result:

 st_isvalid |                   st_isvalidreason                   |
------------+------------------------------------------------------+
 f          | Self-intersection at or near point (60.0, 50.0, NaN) |

                                          st_asewkt                                       
---------------------------------------------------------------------------
 MULTIPOLYGON (((10 30, 10 70, 60 70, 60 30, 10 30)), ((40 50, 40 80, 70 80, 70 50, 40 50)))
(1 row)
Coordinate Dimensions
2D3DM
Spatial Standards Support
OGC SFS for SQL. 1.1 (1999)OGC SFS for SQL. 1.1.0 (2005)OGC SFS for SQL. 1.2.0 (2006)SQL-MM Part 3
----

Examples

PostgreSQL

ST_Collect(geomA,geomB)

SELECT ST_AsEWKT(ST_Collect(ST_GeomFromText('POINT(5 5 10 8)'),
                            ST_GeomFromText('LINESTRING(0 0 10 8,1 1 1 1)')));
--Result
GEOMETRYCOLLECTION (POINT (5 5 10 8), LINESTRING (0 0 10 8, 1 1 1 1))

ST_Collect(geomArray)

SELECT AsEWKT(ST_Collect(Array[ST_MakePoint(0, 0), ST_MakePoint(10, 10),ST_MakePoint(15, 10)]));
                asewkt
--------------------------------------
 MULTIPOINT ((0 0), (10 10), (15 10))
(1 row)

ST_Collect(Aggregate)

This example creates a collection of points from a set of single points. 
The single points are stored in the gps_points table. 
The INSERT INTO statements that follow insert each one of the points geometries.

CREATE TABLE "gps_points"(id serial PRIMARY KEY);
SELECT AddGeometryColumn ('gps_points','geom',-1,'POINT',2);

INSERT INTO "gps_points" ("geom") VALUES (ST_GeomfromEWKT('SRID=-1;POINT(0 0)'));
INSERT INTO "gps_points" ("geom") VALUES (ST_GeomfromEWKT('SRID=-1;POINT(10 10)'));
INSERT INTO "gps_points" ("geom") VALUES (ST_GeomfromEWKT('SRID=-1;POINT(15 15)'));

SELECT asewkt(ST_Collect("gps_points"."geom")) as measures from "gps_points";
SELECT DropGeometryTable ('gps_points');

--Result
               measures
--------------------------------------
 MULTIPOINT ((0 0), (10 10), (15 15))
H2

ST_Collect(geomA,geomB)

SELECT ST_AsEWKT(ST_Collect(ST_GeomFromText('POINT(5 5 10 8)'),ST_GeomFromText('POINT(0 0 10 8)')));
--Result
MULTIPOINT ((5 5 10 8), (0 0 10 8))

ST_Collect(geomArray)

-- (1st Version)
SELECT ST_AsText(ST_Collect(st_accumagg(geom))) as mycollection from (SELECT array_get(
(
st_geomfromtext('POINT(0 0)'),
st_geomfromtext('POINT(10 10)'),
st_geomfromtext('POINT(15 15)')
),x)::binary as geom from (select x from system_range(1,3) as foo) as tabla);

--Result
MULTIPOINT ((0 0), (10 10), (15 15))

--(2nd Version)
SELECT ST_AsText(ST_Collect(st_accumagg(geom))) as myline
from
(SELECT ST_geomfromtext('LINESTRING(0 0,10 10)') as geom
union
SELECT ST_geomfromtext('LINESTRING(10 10,15 10)') 
union 
SELECT ST_geomfromtext('LINESTRING(15 10,20 20)') 
) as geom;

--Result
MULTILINESTRING ((10 10, 15 10), (15 10, 20 20), (0 0, 10 10))

ST_Collect(Aggregate)

CREATE TABLE "gps_points"(id serial PRIMARY KEY);
SELECT AddGeometryColumn ('gps_points','geom',-1,'POINT',2);

INSERT INTO "gps_points" ("geom") VALUES (ST_GeomfromEWKT('SRID=-1;POINT(0 0)'));
INSERT INTO "gps_points" ("geom") VALUES (ST_GeomfromEWKT('SRID=-1;POINT(10 10)'));
INSERT INTO "gps_points" ("geom") VALUES (ST_GeomfromEWKT('SRID=-1;POINT(15 15)'));

SELECT asewkt(ST_CollectAgg("gps_points"."geom")) as measures from "gps_points";
SELECT DropGeometryTable ('gps_points');

--Result
MEASURES  
MULTIPOINT ((0 0), (10 10), (15 15))

Related functions

ST_Dump