ST_Union — Calcule une géométrie représentant l'union des ensembles de points des géométries d'entrée.
geometry ST_Union(
geometry g1, geometry g2)
;
geometry ST_Union(
geometry g1, geometry g2, float8 gridSize)
;
geometry ST_Union(
geometry[] g1_array)
;
geometry ST_Union(
geometry set g1field)
;
geometry ST_Union(
geometry set g1field, float8 gridSize)
;
Unifie les géométries d'entrée, fusionne les géométries pour produire une géométrie de résultat sans chevauchement. Le résultat peut être une géométrie atomique, une MultiGeometry ou une Geometry Collection. Il existe plusieurs variantes :
Variante à deux entrées: renvoie une géométrie qui est l'union de deux géométries d'entrée. Si l'une des entrées est NULL, NULL est renvoyé.
Variante tableau: renvoie une géométrie qui est l'union d'un tableau de géométries.
Variante agrégée: renvoie une géométrie qui est l'union d'un ensemble de géométries. La fonction ST_Union() est une fonction "agrégée" dans la terminologie de PostgreSQL. Cela signifie qu'elle opère sur des lignes de données, de la même manière que les fonctions SUM() et AVG() et, comme la plupart des agrégats, elle ignore les géométries NULL.
Voir ST_UnaryUnion pour une variante non agrégée, à entrée unique.
Le tableau ST_Union et ses variantes utilisent l'algorithme rapide d'union en cascade décrit dans http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.html
Un gridSize
peut être spécifiée pour travailler dans un espace de précision fixe. Les entrées sont placées sur une grille de la taille donnée, et les sommets du résultat sont calculés sur cette même grille. (Nécessite GEOS-3.9.0 ou plus)
ST_Collect peut parfois être utilisé à la place de ST_Union, si le résultat n'a pas besoin d'être non chevauchant. ST_Collect est généralement plus rapide que ST_Union car il n'effectue aucun traitement sur les géométries collectées. |
Effectué par le module GEOS.
ST_Union crée une MultiLineString et ne fusionne pas les LineStrings en une seule LineString. Utilisez ST_LineMerge pour fusionner les LineStrings.
NOTE : cette fonction s'appelait auparavant GeomUnion(), qui a été renommée "Union" car UNION est un mot réservé de SQL.
Amélioration : 3.1.0 accepte un paramètre gridSize.
Nécessite GEOS >= 3.9.0 pour utiliser le paramètre gridSize
Modifié : 3.0.0 ne dépend pas de SFCGAL.
Disponibilité : 1.4.0 - ST_Union a été amélioré. ST_Union(geomarray) a été introduit ainsi qu'une collecte d'agrégats plus rapide dans PostgreSQL.
Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3
La version agrégée n'est pas explicitement définie dans l'OGC SPEC. |
Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.19 l'indice z (élévation) lorsque des polygones sont impliqués.
Cette fonction prend en charge la 3D et ne supprime pas l'indice z. Cependant, le résultat est calculé en utilisant uniquement XY. Les valeurs Z résultantes sont copiées, moyennées ou interpolées.
Exemple d'agrégat
SELECT id, ST_Union(geom) as singlegeom FROM sometable f GROUP BY id;
Exemple non agrégé
select ST_AsText(ST_Union('POINT(1 2)' :: geometry, 'POINT(-2 3)' :: geometry)) st_astext ---------- MULTIPOINT(-2 3,1 2) select ST_AsText(ST_Union('POINT(1 2)' :: geometry, 'POINT(1 2)' :: geometry)) st_astext ---------- POINT(1 2)
Exemple 3D - en quelque sorte des supports 3D (et avec des dimensions mixtes !)
select ST_AsEWKT(ST_Union(geom)) from ( select 'POLYGON((-7 4.2,-7.1 4.2,-7.1 4.3, -7 4.2))'::geometry geom union all select 'POINT(5 5 5)'::geometry geom union all select 'POINT(-2 3 1)'::geometry geom union all select 'LINESTRING(5 5 5, 10 10 10)'::geometry geom ) as foo; st_asewkt --------- GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 5,-7.1 4.2 5,-7.1 4.3 5,-7 4.2 5)));
Exemple en 3D ne mélangeant pas les dimensions
select ST_AsEWKT(ST_Union(geom)) from ( select 'POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2, -7 4.2 2))'::geometry geom union all select 'POINT(5 5 5)'::geometry geom union all select 'POINT(-2 3 1)'::geometry geom union all select 'LINESTRING(5 5 5, 10 10 10)'::geometry geom ) as foo; st_asewkt --------- GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 2,-7.1 4.2 3,-7.1 4.3 2,-7 4.2 2))) --Examples using new Array construct SELECT ST_Union(ARRAY(SELECT geom FROM sometable)); SELECT ST_AsText(ST_Union(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'), ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktunion; --wktunion--- MULTILINESTRING((3 4,4 5),(1 2,3 4))
ST_Collect, ST_UnaryUnion, ST_MemUnion, ST_Intersection, ST_Difference, ST_SymDifference