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 typeGEOMETRY
. - geom2
-
Valeur de type de données
GEOMETRY
ou expression qui est évaluée sur un typeGEOMETRY
. - aggregate_expression
-
Colonne de type de données
GEOMETRY
ou expression qui est évaluée sur un typeGEOMETRY
. - [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 estASC
.
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)