Namn

ST_Collect — Skapar en GeometryCollection eller Multi* geometri från en uppsättning geometrier.

Synopsis

geometry ST_Collect(geometry g1, geometry g2);

geometry ST_Collect(geometry[] g1_array);

geometry ST_Collect(geometry set g1field);

Beskrivning

Samlar geometrier till en geometrisamling. Resultatet är antingen en Multi* eller en GeometryCollection, beroende på om indatageometrierna har samma eller olika typer (homogena eller heterogena). De ingående geometrierna lämnas oförändrade inom samlingen.

Variant 1: accepterar två inmatningsgeometrier

Variant 2: accepterar en array av geometrier

Variant 3: Aggregerad funktion som tar emot en rad med geometrier.

[Varning]

ST_Collect löser inte upp gränser eller överlappningar. Att samla överlappande polygoner kan skapa en ogiltig MultiPolygon. Använd i stället ST_Union om resultatet måste vara en giltig polygonal geometri med sammanslagna överlappningar. ST_Union delar också linestrings vid skärningar och kan returnera en enda geometri efter att gränser lösts upp.

Om någon indatageometri är en samling (Multi* eller GeometryCollection) returnerar ST_Collect en GeometryCollection, eftersom det är den enda typ som kan innehålla kapslade samlingar. Undvik detta genom att använda ST_Dump i en underfråga för att expandera indatasamlingar till deras atomära element (se exemplet nedan).

Tillgänglighet: 1.4.0 - ST_Collect(geomarray) introducerades. ST_Collect förbättrades för att hantera fler geometrier snabbare.

Denna funktion stöder 3d och kommer inte att tappa z-index.

Denna metod stöder cirkulära strängar och kurvor.

Exempel

Variant med två indata.

Samla 2D-punkter.

Kod
SELECT ST_Collect(
    'POINT(1 2)',
    'POINT(-2 3)' );
Utdata
MULTIPOINT((1 2),(-2 3))
Figur
Geometry figure for visual-st-collect-01

Samla 3D-punkter.

Kod
SELECT ST_Collect(
        'POINT(1 2 3)',
        'POINT(1 2 4)' );
Utdata
MULTIPOINT(1 2 3,1 2 4)
Figur
Geometry figure for visual-st-collect-02

Samla kurvor.

Kod
SELECT ST_Collect(
        'CIRCULARSTRING(220268 150415,220227 150505,220227 150406)',
        'CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)');
Utdata
MULTICURVE(CIRCULARSTRING(220268 150415,220227 150505,220227 150406),
CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))
Figur
Geometry figure for visual-st-collect-03

Matrisvariant.

Använda en array constructor för en subquery.

Kod
SELECT ST_Collect(ARRAY(SELECT geom FROM sometable));

Använda en array constructor för värden.

Kod
SELECT ST_Collect(
        ARRAY[ 'LINESTRING(1 2,3 4)'::geometry,
            'LINESTRING(3 4,4 5)'::geometry ] ) As wktcollect;
Utdata
MULTILINESTRING((1 2,3 4),(3 4,4 5))
Figur
Geometry figure for visual-st-collect-04

Aggregatvariant.

Skapa flera samlingar genom att gruppera geometrier i en tabell.

Kod
SELECT stusps, ST_Collect(geom) AS geom
FROM (
  SELECT stusps, (ST_Dump(geom)).geom AS geom
  FROM somestatetable
) AS f
GROUP BY stusps;

Se även

ST_Dump, ST_Union