我有一个整数(节点或目的地)数组,即需要按给定序列访问的数组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);
的
第二对(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可能使用循环等?请告诉我怎么做。谢谢。
发布于 2018-05-20 09:06:38
注意,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-07-04 03:20:59
如果您想要所有对的距离,那么使用
select * from pgr_apspJohnson ('SELECT gid as id,source,target,rcost_len AS cost FROM finalroads)
https://stackoverflow.com/questions/50429760
复制相似问题