รับเส้นทางที่สั้นที่สุดหลายเส้นทางด้วย PgRouting ในแบบสอบถามหรือไม่


12

ฉันต้องการเรียกใช้อัลกอริธึมพา ธ ที่สั้นที่สุดในหลาย ๆ แหล่ง & เป้าหมายคู่กันในครั้งเดียวและรับผลเป็นตารางแล้วประมวลผลมัน

ฉันจะทำสิ่งนี้ได้อย่างไร แบบสอบถามนี้ไม่ทำงาน:

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 ไม่ได้หมายถึงทุกคนอย่างแท้จริง :) มันเป็นเพียงจำนวนคู่สุ่ม)

สิ่งนี้ไม่ทำงาน:

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

---- คุณช่วยขยายเรื่องนี้หน่อยได้ไหม? ฉันมีปัญหาเดียวกัน แต่ไม่สามารถรับคู่เหล่านี้ใช่มั้ย (จากการแก้ไขโพสต์ที่พยายามทำ]
Mapperz

คำตอบ:


13

สิ่งที่ต้องการ

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

ต่อไปนี้เป็นข้อความค้นหาที่ส่งคืนกลุ่มทั้งหมดสำหรับชุดค่าผสมเป้าหมายเป้าหมายทั้งหมด:

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

เหลือเชื่อไม่สอดคล้องกับไวยากรณ์ SQL แต่ใช้งานได้!

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.