ST_Collect - Amazon Redshift

ST_Collect

ST_Collect tem duas variantes. Um aceita duas geometrias, e outro aceita uma expressão agregada.

A primeira variante de ST_Collect cria uma geometria das geometrias de entrada. A ordem das geometrias de entrada é preservada. Essa variante funciona da seguinte maneira:

  • Se ambas as geometrias de entrada forem pontos, então um MULTIPOINTcom dois pontos é retornado.

  • Se ambas as geometrias de entrada são linestrings, então um MULTILINESTRING com dois linestrings é retornado.

  • Se ambas as geometrias de entrada forem polígonos, então um MULTIPOLYGON com dois polígonos é retornado.

  • Caso contrário, um GEOMETRYCOLLECTION com duas geometrias de entrada é retornado.

A segunda variante de ST_Collect cria uma geometria a partir de geometrias em uma coluna de geometria. Não há uma determinada ordem de retorno das geometrias. Especifique a cláusula WITHIN GROUP (ORDER BY...) para especificar a ordem das geometrias retornadas. Essa variante funciona da seguinte maneira:

  • Se todas as linhas não-NULL na expressão agregada de entrada forem pontos, um multiponto contendo todos os pontos na expressão agregada será retornado.

  • Se todas as linhas não-NULL na expressão agregada forem linestrings, uma multilinestring contendo todas as linhas na expressão agregada será retornada.

  • Se todas as linhas não-NULL na expressão agregada forem polígonos, o resultado será um multipolígono contendo todos os polígonos na expressão agregada será retornado.

  • Caso contrário, uma GEOMETRYCOLLECTION contendo todas as geometrias na expressão agregada é retornada.

O ST_Collect retorna a geometria da mesma dimensão que as geometrias de entrada. Todas as geometrias de entrada devem ser da mesma dimensão.

Sintaxe

ST_Collect(geom1, geom2)
ST_Collect(aggregate_expression) [WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]

Argumentos

geom1

Um valor de tipo de dados GEOMETRY ou uma expressão que é avaliada como um tipo GEOMETRY.

geom2

Um valor de tipo de dados GEOMETRY ou uma expressão que é avaliada como um tipo GEOMETRY.

aggregate_expression

Uma coluna de tipo de dados GEOMETRY ou uma expressão que é avaliada como um tipo GEOMETRY.

[WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]

Uma cláusula opcional que especifica a ordem de classificação dos valores agregados. A cláusula ORDER BY contém uma lista de expressões de classificação. Expressões de classificação são expressões semelhantes a expressões de classificação válidas em uma lista de seleção de consulta, como um nome de coluna. Você pode especificar por ordem crescente (ASC) ou decrescente (DESC). O padrão é ASC.

Tipo de retorno

GEOMETRY de subtipo MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, ou GEOMETRYCOLLECTION.

O valor do identificador do sistema de referência espacial (SRID - spatial reference system identifier) da geometria retornada é o valor do SRID das geometrias de entrada.

Nulo será retornado se geom1 ou geom2 for nulo.

Se todas as linhas de aggregate_expression forem nulas, então null será retornado.

Null será retornado se geom1 ou geom2 for nulo. Da mesma forma, segeom2 for nulo, então uma cópia d ogeom1 é retornado.

Um erro será retornado se geom1 e geom2 tiverem valores de SRIDs diferentes.

Se duas geometrias em aggregate_expression tiverem valores de SRID diferentes, será retornado um erro.

Se a geometria retornada for maior que o tamanho máximo de umGEOMETRY, um erro será retornado.

Se geom1 e geom2 forem de dimensões diferentes, será retornado um erro.

Se duas geometrias em aggregate_expression forem de dimensões diferentes, será retornado um erro.

Exemplos

O SQL a seguir retorna uma coleção de geometrias que contém as duas geometrias de entrada.

SELECT ST_AsText(ST_Collect(ST_GeomFromText('LINESTRING(0 0,1 1)'), ST_GeomFromText('POLYGON((10 10,20 10,10 20,10 10))')));
st_astext ----------- GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),POLYGON((10 10,20 10,10 20,10 10)))

O SQL a seguir coleta todas as geometrias de uma tabela em uma coleção de geometria.

WITH tbl(g) AS (SELECT ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT NULL::geometry UNION ALL SELECT ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326)) SELECT ST_AsEWKT(ST_Collect(g)) FROM tbl;
st_astext ----------- SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,10 0),MULTIPOINT((13 4),(8 5),(4 4)),POLYGON((0 0,10 0,0 10,0 0)))

O SQL a seguir coleta todas as geometrias na tabela agrupadas pela coluna id e ordenadas por esse ID. Neste exemplo, as geometrias resultantes são agrupadas por ID da seguinte forma:

  • id 1 — pontos em um multiponto.

  • id 2 — linestrings em uma multilinestring.

  • id 3 — subtipos mistos em uma coleção de geometrias.

  • id 4 — polígonos em um multipolígono.

  • id 5 — nulo e o resultado será null.

WITH tbl(id, g) AS (SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry) SELECT id, ST_AsEWKT(ST_Collect(g)) FROM tbl GROUP BY id ORDER BY id;
id | st_asewkt ----+----------------------------------------------------------------------------------------------------------- 1 | SRID=4326;MULTIPOINT((1 2),(4 5)) 2 | SRID=4326;MULTILINESTRING((0 0,10 0),(10 0,20 -5)) 3 | SRID=4326;GEOMETRYCOLLECTION(MULTIPOINT((13 4),(8 5),(4 4)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))) 4 | SRID=4326;MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((20 20,20 30,30 20,20 20))) 5 |

O SQL a seguir coleta todas as geometrias de uma tabela em uma coleção de geometrias. Os resultados são ordenados em ordem decrescente por id e, em seguida, lexicograficamente com base em suas coordenadas x mínimas e máximas.

WITH tbl(id, g) AS ( SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry) SELECT ST_AsEWKT(ST_Collect(g) WITHIN GROUP (ORDER BY id DESC, ST_XMin(g), ST_XMax(g))) FROM tbl;
st_asewkt --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SRID=4326;GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),POLYGON((20 20,20 30,30 20,20 20)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5)),MULTIPOINT((13 4),(8 5),(4 4)),LINESTRING(0 0,10 0),LINESTRING(10 0,20 -5),POINT(1 2),POINT(4 5)