pgr_kDijkstra - Mutliple destination Shortest Path Dijkstra¶
Name¶
- pgr_kdijkstraCost - Returns the costs for K shortest paths using Dijkstra algorithm.
Warning
This functions is deprecated in 2.2. Use pgr_dijkstraCost instead.
- pgr_kdijkstraPath - Returns the paths for K shortest paths using Dijkstra algorithm.
Warning
This function is deprecated in 2.2. Use pgr_dijkstra instead.
Synopsis¶
These functions allow you to have a single start node and multiple destination nodes and will compute the routes to all the destinations from the source node. Returns a set of pgr_costResult or pgr_costResult3. pgr_kdijkstraCost returns one record for each destination node and the cost is the total code of the route to that node. pgr_kdijkstraPath returns one record for every edge in that path from source to destination and the cost is to traverse that edge.
pgr_costResult[] pgr_kdijkstraCost(text sql, integer source,
integer[] targets, boolean directed, boolean has_rcost);
pgr_costResult3[] pgr_kdijkstraPath(text sql, integer source,
integer[] targets, boolean directed, boolean has_rcost);
Description¶
sql: | a SQL query, which should return a set of rows with the following columns: SELECT id, source, target, cost [,reverse_cost] FROM edge_table
|
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
source: | int4 id of the start point |
||||||||||
targets: | int4[] an array of ids of the end points |
||||||||||
directed: | true if the graph is directed |
||||||||||
has_rcost: | if true, the reverse_cost column of the SQL generated set of rows will be used for the cost of the traversal of the edge in the opposite direction. |
pgr_kdijkstraCost returns set of pgr_costResult[]:
seq: | row sequence |
---|---|
id1: | path vertex source id (this will always be source start point in the query). |
id2: | path vertex target id |
cost: | cost to traverse the path from id1 to id2. Cost will be -1.0 if there is no path to that target vertex id. |
pgr_kdijkstraPath returns set of pgr_costResult3[] - Multiple Path Results with Cost:
seq: | row sequence |
---|---|
id1: | path target id (identifies the target path). |
id2: | path edge source node id |
id3: | path edge id (-1 for the last row) |
cost: | cost to traverse this edge or -1.0 if there is no path to this target |
History
- Deprecated in version 2.0.0
- New in version 2.0.0
Examples¶
- Returning a cost result
SELECT * FROM pgr_kdijkstraCost(
'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table',
10, array[4,12], false, false);
NOTICE: Deprecated function. Use pgr_dijkstraCost instead.
seq | id1 | id2 | cost
-----+-----+-----+------
0 | 10 | 4 | 4
1 | 10 | 12 | 2
(2 rows)
SELECT * FROM pgr_kdijkstraPath(
'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table',
10, array[4,12], false, false);
NOTICE: Deprecated function: Use pgr_dijkstra instead.
seq | id1 | id2 | id3 | cost
-----+-----+-----+-----+------
0 | 4 | 10 | 12 | 1
1 | 4 | 11 | 13 | 1
2 | 4 | 12 | 15 | 1
3 | 4 | 9 | 16 | 1
4 | 4 | 4 | -1 | 0
5 | 12 | 10 | 12 | 1
6 | 12 | 11 | 13 | 1
7 | 12 | 12 | -1 | 0
(8 rows)
- Returning a path result
SELECT id1 AS path, st_AStext(st_linemerge(st_union(b.the_geom))) AS the_geom
FROM pgr_kdijkstraPath(
'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table',
10, array[4,12], false, false
) a,
edge_table b
WHERE a.id3=b.id
GROUP by id1
ORDER by id1;
NOTICE: Deprecated function: Use pgr_dijkstra instead.
path | the_geom
------+---------------------------------
4 | LINESTRING(2 3,3 3,4 3,4 2,4 1)
12 | LINESTRING(2 3,3 3,4 3)
(2 rows)
There is no assurance that the result above will be ordered in the direction of flow of the route, ie: it might be reversed. You will need to check if st_startPoint() of the route is the same as the start node location and if it is not then call st_reverse() to reverse the direction of the route. This behavior is a function of PostGIS functions st_linemerge() and st_union() and not pgRouting.