1

我有一个整数数组(节点或目的地),即数组[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 中自动执行此操作,可能正在使用循环等?请让我知道该怎么做。谢谢你。

4

2 回答 2

1

使用这篇文章中提供的使用源的解决方案,可以使用您的数组。请注意,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;
于 2018-05-20T01:06:38.097 回答
0

如果您想要所有对距离,请使用

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

于 2018-07-03T19:20:58.943 回答