ST_GeometryN — GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, MULTICURVE, MULTIPOLYGONの場合には,1はじまりでN番目のジオメトリを返します.それ以外の場合にはNULLを返します.
geometry ST_GeometryN(
geometry geomA, integer n)
;
GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, MULTICURVE, MULTIPOLYGONの場合には,1はじまりでN番目のジオメトリを返します.それ以外の場合にはNULLを返します.
![]() | |
OGC仕様のため0.8.0版からインデクスを1はじまりにしています.これより前の版では0はじまりになっています. |
![]() | |
ひとつのジオメトリから全てのジオメトリを抽出したい場合は,ST_Dumpを使う方が効果的ですし,単一ジオメトリにも対応しています. |
このメソッドは OpenGIS Simple Features Implementation Specification for SQL 1.1.を実装するものです.
このメソッドはSQL/MM仕様の実装です. SQL-MM 3: 9.1.5
この関数は三次元をサポートします.Zインデクスを削除しません.
このメソッドは曲線ストリングと曲線をサポートします.
--三次元マルチポイントからポイントのサブセットを抽出 SELECT n, ST_AsEWKT(ST_GeometryN(the_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(the_geom) CROSS JOIN generate_series(1,100) n WHERE n <= ST_NumGeometries(the_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) --全てのジオメトリを抽出 (idを付けたい場合に便利です) SELECT gid, n, ST_GeometryN(the_geom, n) FROM sometable CROSS JOIN generate_series(1,100) n WHERE n <= ST_NumGeometries(the_geom);