الاسم
ST_GeometryN — تُعيد عنصرًا من مجموعة أشكال هندسية.
المختصر
geometry ST_GeometryN(geometry geomA, integer n);
الوصف
Return the 1-based Nth element geometry of an input geometry which is a GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, MULTICURVE, MULTIPOLYGON, or POLYHEDRALSURFACE. Otherwise, returns NULL.
|
|
|
يبدأ الفهرس من 1 وفقًا لمواصفات OGC منذ الإصدار 0.8.0. أما الإصدارات السابقة فكانت تبدأه من 0. |
|
|
|
لاستخراج جميع عناصر الشكل الهندسي، تكون ST_Dump أكثر كفاءة وتعمل مع الأشكال الهندسية الذرية. |
حُسّنت في: 2.0.0 أُضيف دعم الأسطح متعددة الوجوه والمثلثات وTIN.
تغيّرت في: 2.0.0 كانت الإصدارات السابقة تُعيد NULL للأشكال الهندسية المفردة. وقد تغيّر ذلك لتُعيد الشكل الهندسي في حالة ST_GeometryN(..,1).
تطبّق هذه الدالة مواصفة OGC Simple Features Implementation Specification for SQL 1.1.
تطبّق هذه الدالة مواصفة SQL/MM. SQL-MM 3: 9.1.5
تدعم هذه الدالة الأبعاد الثلاثية ولا تُسقط قيمة Z.
تدعم هذه الدالة الأقواس الدائرية (Circular Strings) والمنحنيات.
تدعم هذه الدالة الأسطح متعددة الوجوه (Polyhedral surfaces).
تدعم هذه الدالة المثلثات وأسطح الشبكات المثلثية غير المنتظمة (TIN).
أمثلة قياسية
--Extracting a subset of points from a 3d multipoint
SELECT n, ST_AsEWKT(ST_GeometryN(geom, n)) As geomewkt
FROM (
VALUES (ST_GeomFromEWKT('MULTIPOINT((1 2 7), (3 4 7), (5 6 7), (8 9 10))') ),
( ST_GeomFromEWKT('MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 11, 12 11))') )
)As foo(geom)
CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom);
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)
--Extracting all geometries (useful when you want to assign an id)
SELECT gid, n, ST_GeometryN(geom, n)
FROM sometable CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom);
أمثلة الأسطح متعددة الوجوه وTIN والمثلث
-- Polyhedral surface example
-- Break a Polyhedral surface into its faces
SELECT ST_AsEWKT(ST_GeometryN(p_geom,3)) As geom_ewkt
FROM (SELECT ST_GeomFromEWKT('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))
)') AS p_geom ) AS a;
geom_ewkt
------------------------------------------
POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))
-- TIN --
SELECT ST_AsEWKT(ST_GeometryN(geom,2)) as wkt
FROM
(SELECT
ST_GeomFromEWKT('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
))
)') AS geom
) AS g;
-- result --
wkt
-------------------------------------
TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))