| ST_Collect | ST_Force_Collection | ST_MakeGeomColl | |
|---|---|---|---|
| Purpose | Returns a geometry from the collection of others geometries. | Forces the geometry to be a GEOMETRYCOLLECTION. | Constructs a GeometryCollection object from a set of Geometries. |
| Synopsis |
|
|
|
| Input geometries |
|
|
|
| Example | SELECT ST_AsText(ST_Collect(
ST_GeomFromText(' POLYGON ((3 2, 7 7, 7 2, 3 2))'),
ST_GeomFromText(' POLYGON ((5 5, 9 10, 9 5, 5 5))')
));
--Result
MULTIPOLYGON (((30 20, 30 70, 70 70, 70 20, 30 20)),
((50 50, 50 100, 90 100, 90 50, 50 50))) |
SELECT ST_AsText(
ST_Force_Collection
( ST_GeomFromText(' POLYGON ((3 2, 7 7, 7 2, 3 2))' )
));
--Result
GEOMETRYCOLLECTION (POLYGON ((30 20, 30 70, 70 70, 70 20, 30 20)))
|
SELECT ST_AsText( ST_MakeGeomColl ( st_accumagg(geom)))
as geomcollect from (select array_get((
st_geomfromtext(' POLYGON ((3 2, 7 7, 7 2, 3 2))'),
st_geomfromtext(' POLYGON ((5 5, 9 10, 9 5, 5 5))')
),x)::binary as geom
from (select x from system_range(1,2) as foo) as table);
--Result
GEOMETRYCOLLECTION (POLYGON ((30 20, 30 70, 70 70, 70 20, 30 20)),
POLYGON ((50 50, 50 100, 90 100, 90 50, 50 50))) |
| Result | MULTI* GEOMETRYCOLLECTION |
GEOMETRYCOLLECTION | GEOMETRYCOLLECTION |
Find the lines that are within a distance of 1 meter to the "A" line. In this example, the quickest and most intuive way to find it is using a clause "WHERE ST_Distance (A,B) < 1".
![]() |
In indexable queries the Bounding Boxes are used to reduce the searching area. First step is to expand the BBox.
SELECT ST_AsText(ST_Expand(A,1)) FROM
(SELECT ST_GeomFromText('LINESTRING (1 1, 2 3, 3 2, 4 4)')
AS A) as foo;
--Result
POLYGON ((0 0, 0 5, 5 5, 5 0, 0 0)) | ![]() |
Next, ST_Expand (A,1) && B is used to do indexable queries. In the following query, we check if the Bounding Boxes overlap.
SELECT ((ST_Expand(A,1) && B)) as AB,
((ST_Expand(A,1) && C)) as AC
FROM (SELECT ST_GeomFromText('LINESTRING (1 1, 2 3, 3 2, 4 4)') as A,
ST_GeomFromText('LINESTRING (4 3, 5 2, 7 2, 7 2)') as B,
ST_GeomFromText('LINESTRING (4 5, 5 6, 7 4)') as C ) as foo;
--Result:
ab | ac
----+----
t | t
(1 row)![]() |
The last step is to check , just in the overlapping BBoxes, if the geometries are really in a distance < 1 m.
SELECT ((ST_Expand(A,1) && B) and ST_Distance(A,B)<1) as AB,
((ST_Expand(A,1) && C) and ST_Distance(A,C)<1) as AC
FROM (SELECT ST_GeomFromText('LINESTRING (1 1, 2 3, 3 2, 4 4)') as A,
ST_GeomFromText('LINESTRING (4 3, 5 2, 7 2, 7 2)') as B,
ST_GeomFromText('LINESTRING (4 5, 5 6, 7 4)') as C ) as foo;
--Result
ab | ac
----+----
t | f
(1 row)![]() | |
ST_DWithin (A,B,1) is equivalent to ((ST_Expand(A,1) && B) and ST_Distance(A,B)<1), with the advantage of which it has a much simpler syntax |
The following example shows the same query with the ST_DWithin function
SELECT ST_DWithin (A,B,1) as AB, ST_DWithin (A,C,1) as AC
FROM (SELECT ST_GeomFromText('LINESTRING (1 1, 2 3, 3 2, 4 4)') as A,
ST_GeomFromText('LINESTRING (4 3, 5 2, 7 2, 7 2)') as B,
ST_GeomFromText('LINESTRING (4 5, 5 6, 7 4)') as C ) as foo;ST_Dump, ST_DumpRings and ST_DumpPoints are functions that takes some geometries and returns a set of geometries. The behaviour of these functions is differentent in Jaspa for PostgreSQL and Jaspa for H2.
There are two ways of using ST_Dump
From ST_Dump
SELECT * from st_dump(st_geomfromewkt('MULTIPOINT (1 2, 3 4, 5 6)'));
SELECT st_astext(a) from st_dump(st_geomfromewkt('MULTIPOINT (1 2, 3 4, 5 6)')) as a;SELECT ST_Dump
SELECT st_dump(st_geomfromewkt('MULTIPOINT (1 2, 3 4, 5 6)'));
SELECT ST_AsText(st_dump(st_geomfromewkt('MULTIPOINT (1 2, 3 4, 5 6)')));The use of ST_Dump with a set of geometries from a table appears in the following example:
select st_dump(geom) from table;
The utilization of ST_Dump with a single geometry appears in the following example:
SELECT geom FROM ST_Dump('select st_geomfromewkt(''MULTIPOINT (1 2, 3 4, 5 6)'')');The use of ST_Dump with a set of geometries from a table appears in the following example:
select geom from st_dump('select <geometry_column> as geom from <table>')You can also recover other fields from the dumped geometries. Just keep in mind that always the first argument of the ST_Dump select clause must be of geometry type. The next example illustrates it:
select a, geom from st_dump('select <geometry_column> as geom, <table_column> as a from <table>')