PostGIS 1.5에서 MULTILINESTRING을 개별 세그먼트로 분해


10

나는이 MULTILINESTRING여러 가지로 구성된 PostGIS와에 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

두 가지 옵션이 떠 오릅니다. 특정 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.