Name

ST_Union — Beräknar en geometri som representerar punktuppsättningssammanslagningen av indatageometrierna.

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

Beskrivning

Förenar indatageometrierna och sammanfogar geometrierna för att producera en resultatgeometri utan överlappningar. Utdata kan vara en atomär geometri, en MultiGeometry eller en Geometry Collection. Finns i flera varianter:

Variant med två inmatningar: returnerar en geometri som är en förening av två inmatningsgeometrier. Om någon av indata är NULL, returneras NULL.

Array variant: returnerar en geometri som är en sammanslagning av en array av geometrier.

Aggregerad variant: returnerar en geometri som är föreningen av en raduppsättning geometrier. ST_Union () -funktionen är en "aggregerad" funktion i terminologin för PostgreSQL. Det betyder att den fungerar på rader med data, på samma sätt som SUM () och AVG () -funktionerna gör och som de flesta aggregat ignorerar den också NULL-geometrier.

Se ST_UnaryUnion för en variant utan aggregat och med en enda inmatning.

ST_Union-arrayen och set-varianterna använder den snabba Cascaded Union-algoritmen som beskrivs i http://blog.cleverelephant.ca/2009/01/must-faster-unions-in-postgis-14.html

Om den valfria parametern gridSize anges (GEOS-3.9.0 eller senare krävs) garanteras att alla resultatpunkter hamnar i ett rutnät med den angivna storleken. För att operationen ska ge förutsägbara resultat måste alla inmatade hörn redan falla på det angivna rutnätet, se ST_ReducePrecision.

[Note]

ST_Collect kan ibland användas i stället för ST_Union, om resultatet inte behöver vara icke-överlappande. ST_Collect är vanligtvis snabbare än ST_Union eftersom den inte utför någon bearbetning av de insamlade geometrierna.

Utförs av GEOS-modulen.

ST_Union skapar MultiLineString och syr inte ihop LineStrings till en enda LineString. Använd ST_LineMerge för att sy LineStrings.

OBS: den här funktionen hette tidigare GeomUnion(), som döptes om från "Union" eftersom UNION är ett reserverat SQL-ord.

Förbättrad: 3.1.0 accepterar en gridSize-parameter.

Kräver GEOS >= 3.9.0 för att använda parametern gridSize

Ändrat: 3.0.0 är inte beroende av SFCGAL.

Tillgänglighet: 1.4.0 - ST_Union förbättrades. ST_Union (geomarray) introducerades och även snabbare aggregerad samling i PostgreSQL.

Denna metod implementerar OGC:s implementeringsspecifikation för enkla funktioner för SQL 1.1. s2.1.1.3

[Note]

Aggregerad version definieras inte uttryckligen i OGC SPEC.

Denna metod implementerar SQL/MM-specifikationen. SQL-MM 3: 5.1.19 z-index (höjd) när polygoner är inblandade.

Denna funktion stöder 3d och kommer inte att tappa z-index. Resultatet beräknas dock endast med hjälp av XY. De resulterande Z-värdena kopieras, medelvärdesbildas eller interpoleras.

Exempel

Aggregerat exempel

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

Icke-aggregerat exempel

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-exempel - stödjer på sätt och vis 3D (och med blandade dimensioner!)

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-exempel som inte blandar dimensioner

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