【问题标题】:how to get the distance of sequence of nodes in pgr_dijkstra pgrouting?如何获得 pgr_dijkstra pgrouting 中节点序列的距离?
【发布时间】:2018-05-19 21:46:47
【问题描述】:

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

【问题讨论】:

    标签: mysql sql postgresql mysql-python pgrouting


    【解决方案1】:

    使用post 中提供的利用源 的解决方案,可以使用您的数组。请注意,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;
    

    【讨论】:

    • 我在 python 中实现了这个 `seq=[1,2,3,4,5] sum_=0.00 for j in range(0,len(seq)-1): c=seq[j ] d=seq[j+1] cur.execute("""SELECT sum(cost) as Cos FROM pgr_dijkstra('SELECT gid as id,source, target, len_km AS cost FROM finalroads',%s, %s, false , false)""",(c,d)) mcc=cur.fetchall() sum_=sum_+mcc[0][0] Dis.append(sum_) b` 但是这个和python中实现的那个同时。有什么方法可以更快地得到结果?
    • @Ayaz49 预计花费大约相同的时间,在两种情况下,相同的函数被调用相同的次数。你应该努力让pg_dijkstra() 更快,但这应该是一个不同的问题。
    • 非常感谢您的帮助先生,我会调查的,
    【解决方案2】:

    如果你想要所有对的距离,那么使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      相关资源
      最近更新 更多