Bir sorguda PgRouting ile birden çok kısa yol mu elde ediyorsunuz?


12

Birden çok kaynak ve hedef çiftinde aynı anda en kısa yol algoritmasını çalıştırmak ve bir tablo olarak bir sonuç almak ve daha sonra işlemek istiyorum.

Bunu nasıl yaparım? Bu sorgu çalışmıyor:

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 tam anlamıyla herkes için anlam ifade etmez, :) sadece bir dizi rastgele çift)

Bu da çalışmaz:

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

---- lütfen bunu genişletir misin? aynı sorun var ama bu çiftleri doğru alamıyorum? (yayının girişimi denenmiştir)
Mapperz

Yanıtlar:


13

Gibi bir şey

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

Tüm kaynak-hedef kombinasyonları için tüm segmentleri döndüren bir sorgu:

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

İnanılmaz, SQL sözdizimi ile tutarsız, ama çalışıyor!

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.