ST_DumpSegments — ジオメトリ内の辺の行であるgeometry_dump行の集合を返します。
geometry_dump[] ST_DumpSegments(geometry geom);
ジオメトリの辺を抽出する、集合を返す関数 (SRF=Set-Returning Function)です。geometry_dump行の集合を返します。各要素はジオメトリ (geomフィールド)と整数配列 (pathフィールド)からなります。
geomフィールドのLINESTRINGは与えられたジオメトリの線分を表現し、CIRCULARSTRINGは円弧線分を表現します。
pathフィールド (integer[])は、与えられたジオメトリの要素内の辺の始点位置を列挙するインデックスです。インデックスは1始まりです。たとえば、LINESTRINGに対しては、LINESTRINGのn番目の辺をiとすると、{i}となります。POLYGONに対しては、iを環番号 (1が外環、続いて内環)、jを環の辺の始点位置とすると、{i,j}となります。
Availability: 3.2.0
この関数は三角形と不規則三角網 (TIN)に対応しています。
この関数は3次元に対応し、Z値を削除しません。
SELECT path,geom
FROM (
SELECT (ST_DumpSegments(g.geom)).*
FROM (SELECT 'GEOMETRYCOLLECTION(
LINESTRING(1 1,3 3,4 4),
POLYGON((5 5,6 6,7 7,5 5))
)'::geometry AS geom
) AS g
) j;
path │ st_astext
---------------------------------
{1,1} │ LINESTRING(1 1,3 3)
{1,2} │ LINESTRING(3 3,4 4)
{2,1,1} │ LINESTRING(5 5,6 6)
{2,1,2} │ LINESTRING(6 6,7 7)
{2,1,3} │ LINESTRING(7 7,5 5)
(5 rows)
この例ではTRIANGLEジオメトリーを使います。
SELECT path,geom
FROM (
SELECT (ST_DumpSegments(g.geom)).*
FROM (SELECT 'TRIANGLE((
0 0,
0 9,
9 0,
0 0
))'::geometry AS geom
) AS g
) j;
path │ st_astext
---------------------------------
{1,1} │ LINESTRING(0 0,0 9)
{1,2} │ LINESTRING(0 9,9 0)
{1,3} │ LINESTRING(9 0,0 0)
(3 rows)
この例ではTINジオメトリーを使います。
SELECT path,geom
FROM (
SELECT (ST_DumpSegments(g.geom)).*
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
) j;
path │ st_asewkt
---------------------------------
{1,1,1} │ LINESTRING(0 0 0,0 0 1)
{1,1,2} │ LINESTRING(0 0 1,0 1 0)
{1,1,3} │ LINESTRING(0 1 0,0 0 0)
{2,1,1} │ LINESTRING(0 0 0,0 1 0)
{2,1,2} │ LINESTRING(0 1 0,1 1 0)
{2,1,3} │ LINESTRING(1 1 0,0 0 0)
(6 rows)