pgr_dijkstraVia
-拟议¶
pgr_dijkstraVia - 经过顶点列表的路径。
Warning
下一版本的拟议功能。
它们并未正式出现在当前版本中。
它们可能会正式成为下一个版本的一部分:
这些函数使用 ANY-INTEGER 和 ANY-NUMERICAL
名字可能不会改变。(但仍然有可能改变)
签名可能不会改变。(但仍然有可能改变)
功能可能不会改变。(但仍然有可能改变)
pgTap 测试已经完成。 但可能需要更多。
文档可能需要完善。
可用性
版本 2.2.0
新 拟议 函数
描述¶
给定一个顶点列表和一个图,该函数等价于为所有 \(i < size\_of(via\;vertices)`的 :math:`vertex_i\) 和 \(vertex_{i+1}\) 之间找到最短路径。
- 路线:
是一个路径序列。
- 路径:
是路线的一段。
签名¶
一次通过¶
[directed, strict, U_turn_on_edge]
(seq, path_id, path_seq, start_vid, end_vid, node, edge, cost, agg_cost, route_agg_cost)
的集合- 示例:
Find the route that visits the vertices \(\{5, 1, 8\}\) in that order on an directed graph.
SELECT * FROM pgr_dijkstraVia(
'SELECT id, source, target, cost, reverse_cost FROM edges order by id',
ARRAY[5, 1, 8]);
seq | path_id | path_seq | start_vid | end_vid | node | edge | cost | agg_cost | route_agg_cost
-----+---------+----------+-----------+---------+------+------+------+----------+----------------
1 | 1 | 1 | 5 | 1 | 5 | 1 | 1 | 0 | 0
2 | 1 | 2 | 5 | 1 | 6 | 4 | 1 | 1 | 1
3 | 1 | 3 | 5 | 1 | 7 | 7 | 1 | 2 | 2
4 | 1 | 4 | 5 | 1 | 3 | 6 | 1 | 3 | 3
5 | 1 | 5 | 5 | 1 | 1 | -1 | 0 | 4 | 4
6 | 2 | 1 | 1 | 8 | 1 | 6 | 1 | 0 | 4
7 | 2 | 2 | 1 | 8 | 3 | 7 | 1 | 1 | 5
8 | 2 | 3 | 1 | 8 | 7 | 10 | 1 | 2 | 6
9 | 2 | 4 | 1 | 8 | 8 | -2 | 0 | 3 | 7
(9 rows)
参数¶
参数 |
类型 |
默认 |
描述 |
---|---|---|---|
|
如所述的 SQL 查询。 |
||
via vertices |
|
将要访问的有序顶点标识符数组。 |
其中:
- ANY-INTEGER:
SMALLINT, INTEGER, BIGINT
可选参数¶
列 |
类型 |
默认 |
描述 |
---|---|---|---|
|
|
|
|
Via可选参数¶
参数 |
类型 |
默认 |
描述 |
---|---|---|---|
|
|
|
|
|
|
|
|
内部查询¶
Edges SQL¶
列 |
类型 |
默认 |
描述 |
---|---|---|---|
|
ANY-INTEGER |
边的标识符。 |
|
|
ANY-INTEGER |
边的第一个端点顶点的标识符。 |
|
|
ANY-INTEGER |
边的第二个端点顶点的标识符。 |
|
|
ANY-NUMERICAL |
边( |
|
|
ANY-NUMERICAL |
-1 |
边(
|
其中:
- ANY-INTEGER:
SMALLINT
,INTEGER
,BIGINT
- ANY-NUMERICAL:
SMALLINT
,INTEGER
,BIGINT
,REAL
,FLOAT
结果列¶
列 |
类型 |
描述 |
---|---|---|
|
|
从 1 开始的顺序值。 |
|
|
路径的标识符。 第一条路径的值为 1。 |
|
|
路径中的相对位置。 路径开头的值为 1。 |
|
|
路径起始顶点的标识符。 |
|
|
路径结束顶点的标识符。 |
|
|
从 |
|
|
用于从路径序列中的
|
|
|
从使用 |
|
|
从 |
|
|
从 seq = 1 的 |
其他示例¶
所有这些示例都是关于在 有向 图上按顺序访问顶点 \(\{5, 7, 1, 8, 15\}\) 的路径。
主查询¶
SELECT * FROM pgr_dijkstraVia(
'SELECT id, source, target, cost, reverse_cost FROM edges order by id',
ARRAY[5, 7, 1, 8, 15]);
seq | path_id | path_seq | start_vid | end_vid | node | edge | cost | agg_cost | route_agg_cost
-----+---------+----------+-----------+---------+------+------+------+----------+----------------
1 | 1 | 1 | 5 | 7 | 5 | 1 | 1 | 0 | 0
2 | 1 | 2 | 5 | 7 | 6 | 4 | 1 | 1 | 1
3 | 1 | 3 | 5 | 7 | 7 | -1 | 0 | 2 | 2
4 | 2 | 1 | 7 | 1 | 7 | 7 | 1 | 0 | 2
5 | 2 | 2 | 7 | 1 | 3 | 6 | 1 | 1 | 3
6 | 2 | 3 | 7 | 1 | 1 | -1 | 0 | 2 | 4
7 | 3 | 1 | 1 | 8 | 1 | 6 | 1 | 0 | 4
8 | 3 | 2 | 1 | 8 | 3 | 7 | 1 | 1 | 5
9 | 3 | 3 | 1 | 8 | 7 | 10 | 1 | 2 | 6
10 | 3 | 4 | 1 | 8 | 8 | -1 | 0 | 3 | 7
11 | 4 | 1 | 8 | 15 | 8 | 12 | 1 | 0 | 7
12 | 4 | 2 | 8 | 15 | 12 | 13 | 1 | 1 | 8
13 | 4 | 3 | 8 | 15 | 17 | 15 | 1 | 2 | 9
14 | 4 | 4 | 8 | 15 | 16 | 16 | 1 | 3 | 10
15 | 4 | 5 | 8 | 15 | 15 | -2 | 0 | 4 | 11
(15 rows)
第三条路径的总成本。¶
SELECT agg_cost FROM pgr_dijkstraVia(
'SELECT id, source, target, cost, reverse_cost FROM edges order by id',
ARRAY[5, 7, 1, 8, 15])
WHERE path_id = 3 AND edge <0;
agg_cost
----------
3
(1 row)
第三条路径末端的路径总成本。¶
SELECT route_agg_cost FROM pgr_dijkstraVia(
'SELECT id, source, target, cost, reverse_cost FROM edges order by id',
ARRAY[5, 7, 1, 8, 15])
WHERE path_id = 3 AND edge < 0;
route_agg_cost
----------------
7
(1 row)
路由中访问的节点。¶
SELECT row_number() over () as node_seq, node
FROM pgr_dijkstraVia(
'SELECT id, source, target, cost, reverse_cost FROM edges order by id',
ARRAY[5, 7, 1, 8, 15])
WHERE edge <> -1 ORDER BY seq;
node_seq | node
----------+------
1 | 5
2 | 6
3 | 7
4 | 3
5 | 1
6 | 3
7 | 7
8 | 8
9 | 12
10 | 17
11 | 16
12 | 15
(12 rows)
到达所访问顶点时的路线总成本。¶
SELECT path_id, route_agg_cost FROM pgr_dijkstraVia(
'SELECT id, source, target, cost, reverse_cost FROM edges order by id',
ARRAY[5, 7, 1, 8, 15])
WHERE edge < 0;
path_id | route_agg_cost
---------+----------------
1 | 2
2 | 4
3 | 7
4 | 11
(4 rows)
节点的 "前方通过 "或 "访问 "状态。¶
SELECT seq, route_agg_cost, node, agg_cost ,
CASE WHEN edge = -1 THEN 'visits'
ELSE 'passes in front'
END as status
FROM pgr_dijkstraVia(
'SELECT id, source, target, cost, reverse_cost FROM edges order by id',
ARRAY[5, 7, 1, 8, 15])
WHERE agg_cost <> 0 or seq = 1;
seq | route_agg_cost | node | agg_cost | status
-----+----------------+------+----------+-----------------
1 | 0 | 5 | 0 | passes in front
2 | 1 | 6 | 1 | passes in front
3 | 2 | 7 | 2 | visits
5 | 3 | 3 | 1 | passes in front
6 | 4 | 1 | 2 | visits
8 | 5 | 3 | 1 | passes in front
9 | 6 | 7 | 2 | passes in front
10 | 7 | 8 | 3 | visits
12 | 8 | 12 | 1 | passes in front
13 | 9 | 17 | 2 | passes in front
14 | 10 | 16 | 3 | passes in front
15 | 11 | 15 | 4 | passes in front
(12 rows)
另请参阅¶
索引和表格