ST_Collect - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

ST_Collect

ST_Collect a deux variantes. L’une accepte deux géométries et l’autre accepte une expression agrégée.

La première variante de ST_Collect crée une géométrie à partir des géométries en entrée. L’ordre des géométries en entrée est conservé. Cette variante fonctionne comme suit :

  • Si les deux géométries en entrée sont des valeurs point, alors une valeur MULTIPOINT avec deux valeurs point est renvoyée.

  • Si les deux géométries en entrée sont des valeurs linestring, alors une valeur MULTILINESTRING avec deux valeurs linestrings est renvoyée.

  • Si les deux géométries en entrée sont des polygones, alors un MULTIPOLYGON avec deux polygones est renvoyé.

  • Sinon, une valeur GEOMETRYCOLLECTION avec deux géométries en entrée est renvoyée.

La deuxième variante de ST_Collect crée une géométrie à partir de géométries dans une colonne de géométrie. Il n’y a pas d’ordre de renvoi déterminé des géométries. Spécifiez la clause WITHIN GROUP (ORDER BY...) pour spécifier l’ordre des géométries renvoyées. Cette variante fonctionne comme suit :

  • Si toutes les lignes non NULL de l’expression d’agrégation en entrée sont des points, un multipoint contenant tous les points de l’expression d’agrégation est renvoyé.

  • Si toutes les lignes non NULL de l’expression agrégée sont des linestrings, une multilinestring contenant toutes les linestrings de l’expression agrégée est renvoyée.

  • Si toutes les lignes non NULL de l’expression agrégée sont des polygones, un multipolygone contenant tous les polygones de l’expression agrégée est renvoyé.

  • Sinon, une GEOMETRYCOLLECTION contenant toutes les géométries de l’expression agrégée est renvoyée.

ST_Collect renvoie la géométrie de la même dimension que les géométries en entrée. Toutes les géométries en entrée doivent être de la même dimension.

Syntaxe

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

Arguments

geom1

Valeur de type de données GEOMETRY ou expression qui est évaluée sur un type GEOMETRY.

geom2

Valeur de type de données GEOMETRY ou expression qui est évaluée sur un type GEOMETRY.

aggregate_expression

Colonne de type de données GEOMETRY ou expression qui est évaluée sur un type GEOMETRY.

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

Clause facultative qui spécifie l’ordre de tri des valeurs regroupées. La clause ORDER BY contient une liste d’expressions de tri. Les expressions de tri sont des expressions similaires aux expressions de tri valides dans une liste de sélection de requête, telles qu’un nom de colonne. Vous pouvez spécifier un ordre de tri croissant (ASC) ou décroissant (DESC). L’argument par défaut est ASC.

Type de retour

GEOMETRY de sous-type MULTIPOINT, MULTILINESTRING, MULTIPOLYGON ou GEOMETRYCOLLECTION.

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID des géométries d’entrée.

Si geom1 ou geom2 est null, null est renvoyé.

Si toutes les lignes de aggregate_expression sont null, null est renvoyé.

Si geom1 est null, une copie de geom2 est renvoyée. De même, si geom2 est null, une copie de geom1 est renvoyée.

Si geom1 et geom2 ont des valeurs SRID différentes, une erreur est renvoyée.

Si deux géométries dans aggregate_expression ont des valeurs SRID différentes, une erreur est renvoyée.

Si la géométrie renvoyée est supérieure à la taille maximale d’une GEOMETRY, une erreur est renvoyée.

Si geom1 et geom2 ont des dimensions différentes, une erreur est renvoyée.

Si deux géométries dans aggregate_expression ont des dimensions différentes, une erreur est renvoyée.

Exemples

Le code SQL suivant renvoie une collection de géométries qui contient les deux géométries d’entrée.

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

Le code SQL suivant collecte toutes les géométries d’une table dans une collection de géométries.

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

Le code SQL suivant collecte toutes les géométries de la table regroupées par la colonne id et classées par cet ID. Dans cet exemple, les géométries résultantes sont regroupées par ID comme suit :

  • id 1 — points dans un multipoint.

  • id 2 : linestrings dans une multilinestring.

  • id 3 — sous-types mixtes d’une collection de géométries.

  • id 4 — polygones dans un multipolygone.

  • id 5 — null et le résultat est 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 |

Le SQL suivant collecte toutes les géométries d’une table d’une collection de géométries. Les résultats sont classés par ordre décroissant par id, puis classés de manière lexicographique en fonction de leurs coordonnées x minimales et maximales.

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)