ST_GeometryN — Returnerar ett element i en geometrisamling.
geometry ST_GeometryN(geometry geomA, integer n);
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.
|
|
|
Index är 1-baserat som för OGC-specifikationer sedan version 0.8.0. Tidigare versioner implementerade detta som 0-baserat istället. |
|
|
|
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).
Extrahera en delmängd punkter från en 3D-multipunkt.
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;
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)
Extrahera alla geometrier, användbart när du vill tilldela ett id.
SELECT gid, n, ST_GeometryN(geom, n) FROM sometable CROSS JOIN generate_series(1,100) n WHERE n <= ST_NumGeometries(geom);
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.
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;
NULL
Det här exemplet begär det andra elementet i en TIN.
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;
NULL