Name

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.

[Note]

Om någon av indatageometrierna är en samling (Multi* eller GeometryCollection) returnerar ST_Collect en GeometryCollection (eftersom det är den enda typ som kan innehålla nästlade samlingar). För att förhindra detta kan du använda ST_Dump i en underfråga för att expandera indatasamlingarna till deras atomära element (se exemplet nedan).

[Note]

ST_Collect och ST_Union ser ut att likna varandra, men fungerar i själva verket på helt olika sätt. ST_Collect aggregerar geometrier till en samling utan att ändra dem på något sätt. ST_Union sammanfogar geometrier geometriskt där de överlappar varandra och delar linjesträngen vid skärningspunkter. Den kan returnera enstaka geometrier när den löser upp gränser.

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.

SELECT ST_AsText( ST_Collect( ST_GeomFromText('POINT(1 2)'),
        ST_GeomFromText('POINT(-2 3)') ));

st_astext
----------
MULTIPOINT((1 2),(-2 3))

Samla 3D-punkter.

SELECT ST_AsEWKT( ST_Collect( ST_GeomFromEWKT('POINT(1 2 3)'),
                ST_GeomFromEWKT('POINT(1 2 4)') ) );

                st_asewkt
-------------------------
 MULTIPOINT(1 2 3,1 2 4)
 

Samla kurvor.

SELECT ST_AsText( ST_Collect( 'CIRCULARSTRING(220268 150415,220227 150505,220227 150406)',
                'CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)'));

                st_astext
------------------------------------------------------------------------------------
MULTICURVE(CIRCULARSTRING(220268 150415,220227 150505,220227 150406),
 CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))

Exempel - Array-variant

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

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

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

SELECT ST_AsText(  ST_Collect(
                ARRAY[ ST_GeomFromText('LINESTRING(1 2, 3 4)'),
                        ST_GeomFromText('LINESTRING(3 4, 4 5)') ] )) As wktcollect;

--wkt collect --
MULTILINESTRING((1 2,3 4),(3 4,4 5))

Exempel - Aggregerad variant

Skapa flera samlingar genom att gruppera geometrier i en tabell.

SELECT stusps, ST_Collect(f.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