Как получить расстояние последовательности узлов в pgr_dijkstra pgrouting? - PullRequest
0 голосов
/ 20 мая 2018

У меня есть массив целых чисел (узлов или пунктов назначения), то есть массив [2,3,4,5,6,8], которые необходимо посетить в данной последовательности.Я хочу получить кратчайшее расстояние с помощью pgr_dijkstra.Но pgr_dijkstra находит кратчайший путь для двух точек, поэтому мне нужно найти расстояние каждой пары, используя pgr_dijkstra и добавив все расстояния, чтобы получить общее расстояние.Пары будут иметь вид
2,3
3,4

4,5

5,6

6,8.Есть ли способ определить функцию, которая принимает этот массив и находит кратчайший путь, используя pgr_dijkstra.

Запрос: для 1-й пары (2,3) SELECT * FROM pgr_dijkstra('SELECT gid as id,source, target, rcost_len AS cost FROM finalroads',2,3, false);

для 2-й пары (3,4) SELECT * FROM pgr_dijkstra('SELECT gid as id,source, target, rcost_len AS cost FROM finalroads'***,3,4,*** false)

для 3-й пары (4,5) SELECT * FROM pgr_dijkstra('SELECT gid as id,source, target, rcost_len AS cost FROM finalroads'***,4,5,*** false);

ПРИМЕЧАНИЕ: Размер массива не фиксированный, он может быть другим.

Есть ли способ автоматизировать это в postgres sql, возможно, используя цикл и т. Д.?Пожалуйста, дайте мне знать, как это сделать.Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Если вам нужно расстояние между всеми парами, используйте

select * from pgr_apspJohnson ('SELECT gid as id, source, target, rcost_len AS стоимость ОТ финальной дороги)

0 голосов
/ 20 мая 2018

Используя решение, представленное в этом посте , в котором используется источник таблица , возможно использовать ваш массив.Обратите внимание, что orig - это ваш массив, в котором пропущена последняя запись, а в dest пропущена 1-я запись.

SELECT 
  source, 
  target,
  (SELECT SUM(cost) FROM  -- or whatever you want to do with the routing result
     (SELECT * 
      FROM pgr_dijkstra('SELECT gid as id,source, target, rcost_len AS cost FROM finalroads',
                        orig,
                        dest, 
                        false))
     ) AS foo 
  ) AS cost
FROM (
  select unnest(myarray[:array_upper(myarray,1)-1])  as orig,
         unnest(myarray[2:]) as dest 
  from (select array[1,2,3,4] myarray) b) c;
...