Nhận tất cả các Nút từ Danh sách các LineStrings liền kề trong PostGIS


8

Tôi sử dụng PostGis và pgRouting. Tôi có một bảng với hình học của các cạnh liền kề được trả về bởi một truy vấn đường dẫn ngắn nhất. Tôi muốn nối các cạnh này và lấy danh sách tất cả các nút mà các cạnh này bao gồm. Làm thế nào để tôi làm điều này trong SQL?

Tôi nghĩ giải pháp sẽ là sự pha trộn giữa LineMerge và GeomUnion, nhưng có cách nào thông minh để làm điều đó không?

Cảm ơn.


ST_LineMerge sẽ không thực hiện công việc. ST_LineMerge - Trả về một (bộ) LineString (s) được hình thành bằng cách khâu lại một ĐA NĂNG. PGRouting gửi lại cho bạn một danh sách các linestring. Có lẽ GemUnion là chìa khóa. Tôi sẽ kiểm tra nếu tôi có thể.
Fabien Ancelin

Câu trả lời:


4

Ok, vì vậy tôi đã tự làm điều đó với chức năng sql đó:

CREATE OR REPLACE FUNCTION adjacent_linestring_array_to_set_of_points(array_geom geometry[])
   RETURNS SETOF geometry AS
$$
DECLARE
    accu_line geometry;
    temp_line geometry;
BEGIN

FOR temp_line in select * from unnest(array_geom) LOOP
    IF accu_line is NULL THEN
        accu_line := temp_line;
    END IF;
    accu_line := linemerge(GeomUnion(accu_line, temp_line));
END LOOP;

RETURN QUERY SELECT ST_PointN(accu_line, generate_series(1, ST_NPoints(accu_line)));
END;
$$

LANGUAGE 'plpgsql' VOLATILE STRICT;
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.