如何获得 pgr_dijkstra pgrouting 中节点序列的距离?

how to get the distance of sequence of nodes in pgr_dijkstra pgrouting?

我有一个整数数组(节点或目的地),即需要按给定顺序访问的数组 [2,3,4,5,6,8]。 我想要的是,使用 pgr_dijkstra 获得最短距离。但是 pgr_dijkstra 找到两点的最短路径,因此我需要使用 pgr_dijkstra 找到每对的距离并将所有距离相加以获得总距离。 这些对就像
2,3
3,4

4,5

5,6

6,8。 有什么方法可以定义一个函数,该函数接受这个数组并使用 pgr_dijkstra.

找到最短路径

查询是: 第一对 (2,3) SELECT * FROM pgr_dijkstra('SELECT gid as id,source, target, rcost_len AS cost FROM finalroads',2,3, false);

第二对(3,4) SELECT * FROM pgr_dijkstra('SELECT gid as id,source, target, rcost_len AS cost FROM finalroads'***,3,4,*** false)

第三对(4,5) SELECT * FROM pgr_dijkstra('SELECT gid as id,source, target, rcost_len AS cost FROM finalroads'***,4,5,*** false);

注意:数组大小不固定,可以不同。

有什么方法可以在 postgres 中自动执行此操作 sql 可能正在使用循环等? 请让我知道该怎么做。 谢谢。

使用此 post 中提供的解决方案,利用源 table,可以使用您的数组。请注意,orig 是您的数组,省略了最后一个条目,dest 省略了第一个条目。

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;

如果你想要所有对距离然后使用

select * from pgr_apspJohnson ('SELECT gid as id,source, target, rcost_len AS cost FROM finalroads)