Agrupa objetos de geometria em um tipo MULTI\* ou GeometryCollection, conforme as geometrias de entrada tenham o mesmo tipo (homogêneas) ou tipos diferentes (heterogêneas).
Sintaxe
geometry ST_Collect(geometry g1, geometry g2);
geometry ST_Collect(geometry[] g1Array);
geometry ST_Collect(geometry set g1Field);
Parâmetros
|
Parâmetro |
Descrição |
|
|
Primeiro objeto de geometria. |
|
|
Segundo objeto de geometria. |
|
|
Array de objetos de geometria. |
|
|
Campo de objetos de geometria de um conjunto de dados. Use ao chamar |
Notas de uso
A função ST_Collect tem três variantes:
Variante 1 — duas entradas (
g1,g2): Combina dois objetos de geometria. Retorna um tipo MULTI\* se ambas as entradas tiverem o mesmo tipo de geometria; caso contrário, retorna uma GeometryCollection.Variante 2 — array (
g1Array): Reúne um array de objetos de geometria em uma única coleção.Variante 3 — agregação (
g1Field): Atua como função de agregação e reúne todos os objetos de geometria de um conjunto de linhas em uma única geometria.
A ST_Collect aceita objetos CircularString e Curve, mas nem sempre retorna o tipo MultiCurve ou MULTI\* esperado.
Se alguma entrada já for um tipo de coleção (MULTI\* ou GeometryCollection), aST_Collectretornará uma GeometryCollection em vez de um tipo MULTI\* plano. Para evitar isso, useST_Dumpem uma subconsulta para expandir as coleções de entrada em seus elementos atômicos antes de chamar aST_Collect.
ST_Collect vs. ST_Union
Ambas as funções combinam objetos de geometria, mas apresentam comportamentos distintos:
|
Comportamento |
ST_Collect |
ST_Union |
|
Dissolução de limites |
Não |
Sim |
|
Tratamento de LineString |
Retorna MultiLineString |
Divide nas interseções de nós |
|
Tipo de retorno |
MULTI\* ou GeometryCollection |
Pode retornar geometria simples |
|
Desempenho |
Mais rápida |
Mais lenta |
Use ST_Collect para agrupar geometrias sem mesclar seus limites. Use ST_Union quando precisar dissolver as geometrias em uma única geometria unificada.
Exemplos
Variante 1: Duas entradas
Colete dois pontos do mesmo tipo para retornar um MULTIPOINT:
SELECT ST_AsText(ST_Collect('POINT(0 0)'::geometry, 'POINT(0 1)'::geometry));
Resultado:
st_astext
---------------------
MULTIPOINT(0 0,0 1)
(1 row)
Colete geometrias de tipos diferentes para retornar uma GeometryCollection:
SELECT ST_AsText(ST_Collect('POINT(0 0)'::geometry, 'LINESTRING(0 2,0 3)'::geometry));
Resultado:
st_astext
----------------------------------------------------
GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 2,0 3))
(1 row)
Variante 3: Agregação
Colete todos os pontos de uma subconsulta em um único MULTIPOINT:
SELECT ST_AsText(ST_Collect(t.geom))
FROM (
SELECT (ST_DumpPoints(st_buffer('POINT(0 0)'::geometry, 1, 'quad_segs=2'))).geom AS geom
) AS t;
Resultado:
st_astext
----------------------------------------------------------------
MULTIPOINT(1 0,0.707106781186548 -0.707106781186547,0 -1,-0.70
7106781186546 -0.707106781186549,-1 0,-0.70710678118655 0.70710
6781186545,0 1,0.707106781186544 0.707106781186551,1 0)
(1 row)