- Categorias:
ST_COLLECT¶
Há duas formas de ST_COLLECT:
Escalar: esta função combina dois objetos GEOGRAPHY em um só.
Agregado: esta função combina todos os objetos GEOGRAPHY de uma coluna em um único objeto GEOGRAPHY.
Sintaxe¶
Scalar:
ST_COLLECT( <geography_expression_1> , <geography_expression_2> )
Aggregate:
ST_COLLECT( <geography_expression_1> )
Argumentos¶
geography_expression_1
Um objeto GEOGRAPHY.
geography_expression_2
Um objeto GEOGRAPHY.
Retornos¶
A função retorna um valor do tipo GEOGRAPHY.
Notas de uso¶
Se g1 e g2 forem ambos objetos de ponto, o resultado será um objeto MultiPoint contendo os dois pontos. Da mesma forma, se g1 e g2 forem ambos objetos LineString, o resultado será um objeto MultiLineString. Etc.
Se g1 e g2 são tipos diferentes de objetos geoespaciais, ou se pelo menos um dos objetos de entrada GEOGRAPHY é uma coleção (por exemplo, MultiLineString, GeometryCollection ou FeatureCollection), então o resultado é um GeometryCollection contendo ambos os objetos de entrada.
Exemplos¶
As consultas abaixo mostram tanto o uso escalar quanto o uso agregado da função ST_COLLECT.
Criar e carregar a tabela:
CREATE TABLE geo3 (g1 GEOGRAPHY, g2 GEOGRAPHY); INSERT INTO geo3 (g1, g2) VALUES ( 'POINT(-180 -90)', 'POINT(-45 -45)' ), ( 'POINT( 0 0)', 'POINT(-60 -60)' ), ( 'POINT(+180 +90)', 'POINT(+45 +45)' );Isso chama ST_COLLECT como uma função escalar para criar um valor MultiPoint que contenha ambos os pontos na mesma linha:
-- Scalar function: SELECT ST_COLLECT(g1, g2) FROM geo3; +------------------------+ | ST_COLLECT(G1, G2) | |------------------------| | { | | "coordinates": [ | | [ | | -180, | | -90 | | ], | | [ | | -45, | | -45 | | ] | | ], | | "type": "MultiPoint" | | } | | { | | "coordinates": [ | | [ | | 0, | | 0 | | ], | | [ | | -60, | | -60 | | ] | | ], | | "type": "MultiPoint" | | } | | { | | "coordinates": [ | | [ | | 180, | | 90 | | ], | | [ | | 45, | | 45 | | ] | | ], | | "type": "MultiPoint" | | } | +------------------------+Isso chama ST_COLLECT como uma função agregada para criar um valor MultiPoint que contém todos os pontos na mesma coluna:
-- Aggregate function: SELECT ST_COLLECT(g1), ST_COLLECT(g2) FROM geo3; +------------------------+------------------------+ | ST_COLLECT(G1) | ST_COLLECT(G2) | |------------------------+------------------------| | { | { | | "coordinates": [ | "coordinates": [ | | [ | [ | | -180, | -45, | | -90 | -45 | | ], | ], | | [ | [ | | 0, | -60, | | 0 | -60 | | ], | ], | | [ | [ | | 180, | 45, | | 90 | 45 | | ] | ] | | ], | ], | | "type": "MultiPoint" | "type": "MultiPoint" | | } | } | +------------------------+------------------------+Isso chama ST_COLLECT primeiro como uma função agregada em cada coluna para criar valores MultiPoint que contenham todos os pontos em cada coluna, e depois chama ST_COLLECT sobre esses dois valores MultiPoint para criar um GeometryCollection que contenha todos os pontos em ambas as colunas. O GeometryCollection resultante é hierárquico.
-- Aggregate and then Collect: SELECT ST_COLLECT(ST_COLLECT(g1), ST_COLLECT(g2)) FROM geo3; +--------------------------------------------+ | ST_COLLECT(ST_COLLECT(G1), ST_COLLECT(G2)) | |--------------------------------------------| | { | | "geometries": [ | | { | | "coordinates": [ | | [ | | -180, | | -90 | | ], | | [ | | 0, | | 0 | | ], | | [ | | 180, | | 90 | | ] | | ], | | "type": "MultiPoint" | | }, | | { | | "coordinates": [ | | [ | | -45, | | -45 | | ], | | [ | | -60, | | -60 | | ], | | [ | | 45, | | 45 | | ] | | ], | | "type": "MultiPoint" | | } | | ], | | "type": "GeometryCollection" | | } | +--------------------------------------------+