名稱

ST_GeometryN — 傳回幾何集合的元素。

概要

geometry ST_GeometryN(geometry geomA, integer n);

描述

傳回輸入幾何圖形的第 N 個元素幾何,該幾何圖形為 GEOMETRYCOLLECTION、MULTIPOINT、MULTILINESTRING、MULTICURVE、MULTIPOLYGON 或 POLYHEDRALSURFACE。否則,傳回 NULL。

[Note]

索引從 1 開始,如同 OGC 規格自 0.8.0 版本以來所定義。先前的版本將其實現為從 0 開始。

[Note]

要提取幾何圖形的所有元素,ST_Dump 更有效率,並且適用於原子幾何圖形。

增強功能:引入了 2.0.0 版本對多面體表面、三角形和 TIN 的支持。

已變更:2.0.0 之前的版本對於單數幾何圖形會傳回 NULL。已變更為在 ST_GeometryN(..,1) 的情況下傳回幾何圖形。

此方法實作了OGC 簡單功能 SQL 1.1 實作規範。

此方法實作了 SQL/MM 規範。SQL-MM 3: 9.1.5

此函數支援 3D,並且不會捨棄 z 索引。

此方法支援圓弧字串和曲線。

此函數支援多面體表面。

此函數支援三角形和不規則三角網格表面 (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))

另請參閱

ST_Dump, ST_NumGeometries