Namn

ST_GeometryN — Returnerar ett element i en geometrisamling.

Synopsis

geometry ST_GeometryN(geometry geomA, integer n);

Beskrivning

Returnerar det N:te elementet, med index som börjar på 1, i en GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, MULTICURVE eller MULTIPOLYGON. För en enhetlig geometri, inklusive TIN eller PolyhedralSurface, returnerar index 1 indatageometrin och alla andra index returnerar NULL. Använd ST_PatchN och ST_NumPatches för att komma åt och räkna ytorna i en TIN eller PolyhedralSurface.

[Notera]

Index är 1-baserat som för OGC-specifikationer sedan version 0.8.0. Tidigare versioner implementerade detta som 0-baserat istället.

[Notera]

För att extrahera alla element i en geometri är ST_Dump mer effektivt och fungerar för atomgeometrier.

Förbättrad: 2.0.0 stöd för polyhedrala ytor, trianglar och TIN infördes.

Ändrad: 2.0.0 Tidigare versioner skulle returnera NULL för singulära geometrier. Detta ändrades till att returnera geometrin för ST_GeometryN(..,1) fallet.

Ändrat: 3.6.0 TIN och PolyhedralSurface behandlas som enhetliga geometrier och delas inte upp i ytor; använd ST_PatchN för att komma åt ytor.

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

Denna metod implementerar SQL/MM-specifikationen. SQL-MM 3: 9.1.5

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

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

Denna funktion stöder polyedriska ytor.

Denna funktion stöder trianglar och triangulerade oregelbundna nätverksytor (TIN).

Standardexempel

Extrahera en delmängd punkter från en 3D-multipunkt.

Kod
SELECT n, ST_GeometryN(geom, n) As geomewkt
FROM (
VALUES
    (1, 'MULTIPOINT((1 2 7), (3 4 7), (5 6 7), (8 9 10))'::geometry ),
    (2, 'MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 11, 12 11))'::geometry )
    ) As foo(id, geom)
    CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom)
ORDER BY id, n;
Utdata
 n |               geomewkt
---+-----------------------------------------
 1 | POINT(1 2 7)
 2 | POINT(3 4 7)
 3 | POINT(5 6 7)
 4 | POINT(8 9 10)
 1 | CIRCULARSTRING(2.5 2.5,4.5 2.5,3.5 3.5)
 2 | LINESTRING(10 11,12 11)
Figur
Geometry figure for visual-st-geometryn-01

Extrahera alla geometrier, användbart när du vill tilldela ett id.

Kod
SELECT gid, n, ST_GeometryN(geom, n)
FROM sometable CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom);

Polyedriska ytor, TIN- och triangelexempel

En PolyhedralSurface eller TIN behandlas som en enda geometri, inte som en samling ytor. ST_GeometryN delar inte upp ytan i ytor, så ett index större än 1 returnerar NULL. Använd ST_PatchN och ST_NumPatches för att komma åt enskilda ytor.

Det här exemplet begär det tredje elementet i en PolyhedralSurface.

Kod
SELECT ST_GeometryN(p_geom, 3) As geom_ewkt
  FROM (SELECT 'POLYHEDRALSURFACE(
((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
)'::geometry  AS p_geom )  AS a;
Utdata
NULL
Figur
Geometry figure for visual-st-geometryn-02

Det här exemplet begär det andra elementet i en TIN.

Kod
SELECT ST_GeometryN(geom, 2) as wkt
  FROM
    (SELECT
       'TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )),((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )'::geometry  AS geom
    ) AS g;
Utdata
NULL
Figur
Geometry figure for visual-st-geometryn-03