Name

ST_Union — Berechnet eine Geometrie, die die Punktmengenvereinigung der Eingabegeometrien darstellt.

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

Beschreibung

Vereinigt die Eingabegeometrien und führt die Geometrien zusammen, um eine überschneidungsfreie Ergebnisgeometrie zu erzeugen. Die Ausgabe kann eine atomare Geometrie, eine MultiGeometry oder eine Geometriesammlung sein. Gibt es in mehreren Varianten:

Variante mit zwei Eingaben: gibt eine Geometrie zurück, die die Vereinigung von zwei Eingabegeometrien ist. Wenn eine der beiden Eingaben NULL ist, wird NULL zurückgegeben.

Array-Variante: gibt eine Geometrie zurück, die die Vereinigung eines Arrays von Geometrien ist.

Aggregat-Variante: gibt eine Geometrie zurück, die die Vereinigung eines Rowsets von Geometrien ist. Die Funktion ST_Union() ist eine "Aggregat"-Funktion in der Terminologie von PostgreSQL. Das bedeutet, dass sie mit Datenzeilen arbeitet, so wie es auch die Funktionen SUM() und AVG() tun, und wie die meisten Aggregate ignoriert sie auch NULL-Geometrien.

Siehe ST_UnaryUnion für eine nicht aggregierte Variante mit einem Eingang.

Die ST_Union Array- und Set-Varianten verwenden den schnellen Cascaded Union-Algorithmus, der in http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.html beschrieben ist.

Ein gridSize kann angegeben werden, um im Raum mit fester Genauigkeit zu arbeiten. Die Eingaben werden auf ein Gitter der angegebenen Größe gerastert, und die Ergebnispunkte werden auf demselben Gitter berechnet. (Benötigt GEOS-3.9.0 oder höher)

[Note]

ST_Collect kann manchmal anstelle von ST_Union verwendet werden, wenn das Ergebnis nicht überlappungsfrei sein muss. ST_Collect ist in der Regel schneller als ST_Union, da es keine Verarbeitung der gesammelten Geometrien vornimmt.

Wird vom GEOS Modul ausgeführt

ST_Union erzeugt MultiLineString und fügt LineStrings nicht zu einem einzigen LineString zusammen. Verwenden Sie ST_LineMerge, um LineStrings zusammenzufügen.

HINWEIS: Diese Funktion hieß früher GeomUnion() und wurde von "Union" umbenannt, da UNION ein reserviertes SQL-Wort ist.

Verbessert: 3.1.0 akzeptiert einen gridSize-Parameter.

Erfordert GEOS >= 3.9.0 zur Verwendung des Parameters gridSize

Geändert: 3.0.0 ist nicht von SFCGAL abhängig.

Verfügbarkeit: 1.4.0 - ST_Union wurde verbessert. ST_Union(geomarray) wurde eingeführt und auch schnellere Aggregat-Sammlung in PostgreSQL.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

[Note]

Die Aggregatversion ist in der OGC SPEC nicht explizit definiert.

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.19 der z-index (Elevation), wenn Polygone beteiligt sind.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen. Das Ergebnis wird jedoch nur mit XY berechnet. Die Z-Werte des Ergebnisses werden kopiert, gemittelt oder interpoliert.

Beispiele

Beispiel für ein Aggregat

SELECT id,
       ST_Union(geom) as singlegeom
FROM sometable f
GROUP BY id;
              

Nicht-Aggregat-Beispiel

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)

3D-Beispiel - unterstützt gewissermaßen 3D (und mit gemischten Dimensionen!)

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

3d-Beispiel ohne Vermischung der Dimensionen

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