Nhận nhiều đường dẫn ngắn nhất với PGRouting trong một truy vấn?


12

Tôi muốn chạy thuật toán đường dẫn ngắn nhất trên nhiều cặp nguồn & đích cùng một lúc và nhận kết quả dưới dạng bảng và xử lý nó sau đó.

Làm thế nào để tôi làm điều này? Truy vấn này không hoạt động:

SELECT a.source, a.target, paths.* 
FROM all_to_all a, shortest_path_astar('...', a.source, a.target, false, false) paths;

ERROR:  function expression in FROM cannot refer to other relations of same query level

(btw, all_to_all không có nghĩa là tất cả đối với tất cả, :) nó chỉ là một số cặp ngẫu nhiên)

Điều này cũng không hoạt động:

SELECT * 
FROM all_to_all a, (
   SELECT * FROM shortest_path_astar('...', a.source, a.target, false, false) yyy
) AS t2;

---- bạn có thể vui lòng mở rộng về điều này? Tôi có cùng một vấn đề nhưng không thể có được những cặp này phải không? (từ một lần chỉnh sửa bài cố gắng]
Mapperz

Câu trả lời:


13

Cái gì đó như

SELECT 
  source, 
  target,
  (SELECT SUM(cost) FROM  -- or whatever you want to do with the routing result
     (SELECT * FROM shortest_path_astar('...',
       source,
       target,
       false,
       false)
     ) AS foo 
  ) AS cost
FROM all_to_all;

4

Đây là một truy vấn trả về tất cả các phân đoạn cho tất cả các kết hợp mục tiêu nguồn:

SELECT
    source,
    target,
    shortest_path_astar('SELECT gid AS id, length AS cost, * FROM ways', source, target, false, false) AS segment
FROM
    all_to_all

Không thể tin được, không phù hợp với cú pháp SQL, nhưng hoạt động!

source | target | segment
-------+--------+----------------
     1 |      4 | (1, 2, 0.1357)
     1 |      4 | (2, 3, 0.2468)
     1 |      4 | (3, 4, 0.9)
     1 |      4 | (4, -1, 0)
other sources & targets here
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.