如何获得 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)
我有一个整数数组(节点或目的地),即需要按给定顺序访问的数组 [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)