MULTILINESTRINGをPostGIS 1.5の個々のセグメントに分解する


10

MULTILINESTRINGPostGIS には、いくつかので構成されるがありLINESTRINGます。それぞれを考えるLINESTRINGのセット持っているPOINTのを

P 1、P 2、... P N

線分を形成する

L 1、L 2、... L N-1

ここで、L XはP XをP X + 1に接続する線分です。

PostGIS 1.5を使用して、MULTILINESTRINGをそれぞれの個々のラインセグメントに分解するにはどうすればよいLINESTRINGですか?

回答:


11

2つのオプションが思い浮かびます。特定が必要なLINESTRING場合は、ST_NumGeometries()およびST_GeometryN()を使用できます。あるいは、すべてのサブジオメトリが必要な場合は、ST_Dump()適しています。

実際に質問を読んだ後、postgis-usersリストからこの投稿と同様のことを行う必要があります。

SELECT ST_AsText( ST_MakeLine(sp,ep) )
FROM
-- extract the endpoints for every 2-point line segment for each linestring
(SELECT
  ST_PointN(geom, generate_series(1, ST_NPoints(geom)-1)) as sp,
  ST_PointN(geom, generate_series(2, ST_NPoints(geom)  )) as ep
FROM
   -- extract the individual linestrings
  (SELECT (ST_Dump(ST_Boundary(geom))).geom
   FROM mypolygontable
   -- eliminate 0 length linestring 
    where st_x(st_startpoint(geom))<> st_x(st_endpoint(geom))
   ) AS linestrings
) AS segments;

私が取得する方法として、あなたの答えを読んでLINESTRINGから「秒MULTILINESTRING。しかし、私はレベルをさらに深くしたいのですが、個々のラインセグメントが必要です。LINESTRINGマージすると、再び、がマージされ、元のが形成されMULTILINESTRINGます。それは理にかなっていますか?
Chau

1
ああ!はい、私はあなたが書いたものを見ることができるコーヒーを持っています...
MerseyViking

1
私はコーヒーを飲んでいないので理解できません;)
Chau

あなたの追加はうまくいきますので、どうもありがとう!
Chau
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.