Phát nổ ĐA NĂNG vào các phân đoạn riêng lẻ trong PostGIS 1.5


10

Tôi có một MULTILINESTRINGPostGIS bao gồm một số LINESTRING. Xem xét từng LINESTRINGcó một bộ POINT's

P 1 , P 2 , ... P N

hình thành các đoạn đường

L 1 , L 2 , ... L N-1

Trong đó L X là đoạn thẳng nối P X với P X + 1 .

Sử dụng PostGIS 1.5, làm cách nào tôi có thể phát nổ MULTILINESTRINGthành các phân đoạn dòng riêng lẻ của từng phân khúc LINESTRING?

Câu trả lời:


11

Hai lựa chọn đến với tâm trí. Nếu bạn muốn cụ thể LINESTRINGthì bạn có thể sử dụng ST_NumGeometries ()ST_GeometryN () . Ngoài ra, nếu bạn muốn tất cả các hình học phụ, ST_Dump () là cách để đi.

Sau khi thực sự đọc câu hỏi, bạn sẽ cần phải làm một cái gì đó tương tự như bài đăng này từ danh sách người dùng postgis :

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;

Tôi đọc câu trả lời của bạn như làm thế nào để có được LINESTRINGtừ a MULTILINESTRING. Nhưng tôi muốn đi sâu hơn một cấp độ, tôi muốn các phân đoạn dòng riêng lẻ, khi được hợp nhất sẽ tạo thành LINESTRINGmột lần nữa, khi được hợp nhất, tạo thành bản gốc MULTILINESTRING. Điều đó có ý nghĩa?
Châu

1
Ah! Vâng, bây giờ tôi đã có một tách cà phê tôi có thể thấy đó là những gì bạn đã viết ...
MerseyViking

1
Tôi không hiểu vì tôi không uống cà phê;)
Chau

Sự bổ sung của bạn chỉ hoạt động tốt, vì vậy cảm ơn rất nhiều!
Châu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.