繁体   English   中英

如何使用 pgRouting 计算 Origin - Destination 对之间的最短路径?

[英]How do I calculate shortest path between Origin - Destination pairs using pgRouting?

首先,我只想 state,我对 GIS 很陌生,而且我可能对术语还不太了解,所以请耐心等待。

我现在正在实习,并负责进行自行车通勤潜力分析。 我使用的数据是道路图层(我已经创建了一个使用 pgr_createTopology 的拓扑)和两个点图层,用于从 500x500m 正方形的质心创建个人生活和工作的地方。

我已经设法使用 pgr_dijkstraCost 在我的两个点层之间进行某种计算,如下所示:

SELECT * 
  FROM pgr_dijkstraCost(
        'SELECT gid AS id,
                source,
                target,
                extlen / 1.3 / 60 AS cost 
           FROM roads',
        array(select source FROM living),
        array(select target FROM work),
        directed := false);

生活和工作测试表中的源和目标值的值从 1 到 50,因为我最初虽然可以通过计算源和目标何时具有相同的值来进行计算。 我现在知道这是不可能的,因为 pgr_dijkstra 在它们相同时不允许计算。 我现在得到的结果是针对我不想要的每个组合。 最终计算将针对大约 300 000 对。

那么有没有办法让我只对指定的对而不是对每个可能的组合进行计算?

从版本 3.1 开始有这个签名

pgr_dijkstra(Edges SQL, Combinations SQL, end_vids, [, directed])
RETURNS SET OF (seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost)
OR EMPTY SET

示例用法(取自 pgRouting 文档)

CREATE TABLE combinations_table (
source BIGINT,
target BIGINT
);

INSERT INTO combinations_table (source, target) 
VALUES (1, 2), (1, 4), (2, 1), (2, 4), (2, 17);

SELECT * FROM pgr_dijkstra(
    'SELECT id, source, target, cost, reverse_cost FROM edge_table',
    'SELECT * FROM combinations_table',
    FALSE
);


seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
----+----------+-----------+---------+------+------+------+----------
 1  |        1 |         1 |       2 |    1 |    1 |    1 |        0
 2  |        2 |         1 |       2 |    2 |   -1 |    0 |        1
 3  |        1 |         1 |       4 |    1 |    1 |    1 |        0
 4  |        2 |         1 |       4 |    2 |    2 |    1 |        1
 5  |        3 |         1 |       4 |    3 |    3 |    1 |        2
 6  |        4 |         1 |       4 |    4 |   -1 |    0 |        3
 7  |        1 |         2 |       1 |    2 |    1 |    1 |        0
 8  |        2 |         2 |       1 |    1 |   -1 |    0 |        1
 9  |        1 |         2 |       4 |    2 |    2 |    1 |        0
10  |        2 |         2 |       4 |    3 |    3 |    1 |        1
11  |        3 |         2 |       4 |    4 |   -1 |    0 |        2
(11 rows)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM