ST_Collect - Amazon Redshift

ST_Collect

ST_Collect tiene dos variantes. Una acepta dos geometrías y otra acepta una expresión agrupada.

La primera variante de ST_Collect crea una geometría a partir de las geometrías de entrada. El orden de las geometrías de entrada se conserva. Esta variante funciona de la siguiente manera:

  • Si ambas geometrías de entrada son puntos, se devuelve un MULTIPOINT con dos puntos.

  • Si ambas geometrías de entrada son cadenas de línea, se devuelve una MULTILINESTRING con dos cadenas de línea.

  • Si ambas geometrías de entrada son polígonos, se devuelve un MULTIPOLYGON con dos polígonos.

  • De lo contrario, se devuelve una GEOMETRYCOLLECTION con dos geometrías de entrada.

La segunda variante de ST_Collect crea una geometría a partir de las geometrías en una columna de geometría. No hay un orden de devolución de las geometrías determinado. Especifique la cláusula WITHIN GROUP (ORDER BY ...) para especificar el orden de las geometrías devueltas. Esta variante funciona de la siguiente manera:

  • Si todas las filas que no son NULL de la expresión agrupada de entrada son puntos, se devuelve un multipunto que contiene todos los puntos de la expresión agrupada.

  • Si todas las filas que no son NULL de la expresión agrupada son cadenas de línea, se devuelve una cadena de varias líneas que contiene todas las cadenas de línea de la expresión agrupada.

  • Si todas las filas que no son NULL de la expresión agrupada son polígonos, el resultado que se devuelve es un multipolígono que contiene todos los polígonos de la expresión agrupada.

  • De lo contrario, se devuelve una GEOMETRYCOLLECTION que contiene todas las geometrías de la expresión agrupada.

ST_Collect devuelve una geometría de la misma dimensión que las geometrías de entrada. Todas las geometrías de entrada deben ser de la misma dimensión.

Sintaxis

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

Argumentos

geom1

Un valor de tipo de datos GEOMETRY o una expresión que toma el valor de un tipo GEOMETRY.

geom2

Un valor de tipo de datos GEOMETRY o una expresión que toma el valor de un tipo GEOMETRY.

expresión_de_agregación

Una columna de tipo de datos GEOMETRY o una expresión que toma el valor de un tipo GEOMETRY.

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

Una cláusula opcional que especifica el orden de los valores agregados. La cláusula ORDER BY contiene una lista de expresiones de ordenación. Las expresiones de ordenación son expresiones similares a las expresiones de ordenación válidas de una lista de selección de la consulta, como un nombre de columna. Puede especificar un orden ascendente (ASC) o descendente (DESC). El valor predeterminado es ASC.

Tipo de retorno

GEOMETRY de subtipo MULTIPOINT, MULTILINESTRING, MULTIPOLYGON o GEOMETRYCOLLECTION.

El valor del identificador de sistema de referencia espacial (SRID) de la geometría devuelta es el valor SRID de las geometrías de entrada de datos.

Si tanto geom1 como geom2 son null, se devuelve el valor null.

Si todas las filas de aggregate_expression son null, se devuelve el valor null.

Si geom1 es null, se devuelve una copia de geom2. Del mismo modo, si geom2 es null, se devuelve una copia de geom1.

Si geom1 y geom2 tienen diferentes valores SRID, se devuelve un error.

Si dos geometrías en aggregate_expression tienen diferentes valores SRID, se devuelve un error.

Si el tamaño de la geometría devuelta es mayor que el tamaño máximo de una GEOMETRY, se devuelve un error.

Si geom1 y geom2 tienen diferentes dimensiones, se devuelve un error.

Si dos geometrías en aggregate_expression tienen diferentes dimensiones, se devuelve un error.

Ejemplos

El siguiente SQL devuelve una colección de geometría que contiene las dos geometrías 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)))

El siguiente SQL recopila todas las geometrías de una tabla en una colección de geometría.

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)))

El siguiente SQL recopila todas las geometrías de la tabla agrupadas por la columna id y ordenadas por este ID. En este ejemplo, las geometrías resultantes se agrupan por ID de la siguiente manera:

  • id 1: puntos en un multipunto.

  • id 2: cadenas de línea en una cadena de varias líneas.

  • id 3: subtipos mixtos en una colección de geometría.

  • id 4: polígonos en un multipolígono.

  • id 5: null y el resultado es 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 |

El siguiente SQL recopila todas las geometrías de una tabla en una colección de geometría. Los resultados se ordenan de forma descendente por id y, luego, lexicográficamente, en función de sus coordenadas x mínimas y 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)