Name

ST_Union — Calcule une géométrie représentant l'union des ensembles de points des géométries d'entrée.

Synopsis

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

Description

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)

[Note]

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.

Enhanced: 3.1.0 accept a gridSize parameter.

Requires GEOS >= 3.9.0 to use the gridSize parameter

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

[Note]

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.

Exemples

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

              

Voir aussi

ST_Collect, ST_UnaryUnion, ST_MemUnion, ST_Intersection, ST_Difference, ST_SymDifference