- Catégories :
ST_COLLECT¶
Il existe deux formes de ST_COLLECT :
Scalaire : cette fonction combine deux objets GEOGRAPHY en un seul.
Agrégat : cette fonction combine tous les objets GEOGRAPHY d’une colonne en un objet GEOGRAPHY.
Syntaxe¶
Scalar:
ST_COLLECT( <geography_expression_1> , <geography_expression_2> )
Aggregate:
ST_COLLECT( <geography_expression_1> )
Arguments¶
geography_expression_1
Un objet GEOGRAPHY.
geography_expression_2
Un objet GEOGRAPHY.
Renvoie¶
La fonction renvoie une valeur de type GEOGRAPHY.
Notes sur l’utilisation¶
Si g1 et g2 sont tous deux des objets Point, le résultat est un objet MultiPoint contenant les deux points. De même, si g1 et g2 sont tous deux des objets LineString, le résultat est un objet MultiLineString. Etc.
Si g1 et g2 sont différents types d’objets géospatiaux, ou si au moins l’un des objets GEOGRAPHY en entrée est une collection (par exemple MultiLineString, GeometryCollection ou FeatureCollection), alors le résultat est un GeometryCollection contenant les deux objets d’entrée.
Exemples¶
Les requêtes ci-dessous montrent les utilisations scalaires et agrégées de la fonction ST_COLLECT.
Créer et charger la table :
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)' );Cela appelle ST_COLLECT en tant que fonction scalaire pour créer une valeur MultiPoint qui contient les deux points sur la même ligne :
-- 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" | | } | +------------------------+Cela appelle ST_COLLECT en tant que fonction d’agrégation pour créer une valeur MultiPoint qui contient tous les points dans la même colonne :
-- 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" | | } | } | +------------------------+------------------------+Cela appelle d’abord ST_COLLECT en tant que fonction d’agrégation sur chaque colonne pour créer des valeurs MultiPoint qui contiennent tous les points de chaque colonne, puis appelle ST_COLLECT sur ces deux valeurs MultiPoint pour créer un GeometryCollection qui contient tous les points dans les deux colonnes. Le GeometryCollection résultant est hiérarchique.
-- 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" | | } | +--------------------------------------------+