pgr_bdAstar
— Returns the shortest path using A* algorithm.
Availability:
pgr_bdAstar(edges_sql, start_vid, end_vid)
pgr_bdAstar(edges_sql, start_vid, end_vid, directed [, heuristic, factor, epsilon])
RETURNS SET OF (seq, path_seq , node, edge, cost, agg_cost)
OR EMPTY SET
Warning
Experimental functions
pgr_bdAstar(edges_sql, start_vid, end_vids [, directed, heuristic, factor, epsilon])
pgr_bdAstar(edges_sql, start_vids, end_vid [, directed, heuristic, factor, epsilon])
pgr_bdAstar(edges_sql, start_vids, end_vids [, directed, heuristic, factor, epsilon])
RETURNS SET OF (seq, path_seq [, start_vid] [, end_vid], node, edge, cost, agg_cost)
OR EMPTY SET
Using these signatures, will load once the graph and perform several one to one pgr_bdAstar
start_vid
and/or end_vid
in the result is used to distinguish to which path it belongs.Avaliability
pgr_bdAstar(edges_sql, start_vid, end_vid)
RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
start_vid
to the end_vid
Example: | Using the defaults |
---|
SELECT * FROM pgr_bdAstar(
'SELECT id, source, target, cost, reverse_cost, x1,y1,x2,y2
FROM edge_table',
2, 3
);
seq | path_seq | node | edge | cost | agg_cost
-----+----------+------+------+------+----------
1 | 1 | 2 | 4 | 1 | 0
2 | 2 | 5 | 8 | 1 | 3
3 | 3 | 6 | 9 | 1 | 5
4 | 4 | 9 | 16 | 1 | 8
5 | 5 | 4 | 3 | 1 | 9
6 | 6 | 3 | -1 | 0 | 10
(6 rows)
pgr_bdAstar(edges_sql, start_vid, end_vid, directed [, heuristic, factor, epsilon])
RETURNS SET OF (seq, path_seq, node, edge, cost, agg_cost)
start_vid
to the end_vid
allowing the user to chooseNote
In the One to One signature, because of the deprecated signature existence, it is compulsory to indicate if the graph is directed or undirected.
Example: | Directed using Heuristic 2 |
---|
SELECT * FROM pgr_bdAstar(
'SELECT id, source, target, cost, reverse_cost, x1,y1,x2,y2
FROM edge_table',
2, 3,
true, heuristic := 2
);
seq | path_seq | node | edge | cost | agg_cost
-----+----------+------+------+------+----------
1 | 1 | 2 | 4 | 1 | 0
2 | 2 | 5 | 8 | 1 | 2
3 | 3 | 6 | 9 | 1 | 3
4 | 4 | 9 | 16 | 1 | 4
5 | 5 | 4 | 3 | 1 | 5
6 | 6 | 3 | -1 | 0 | 6
(6 rows)
pgr_bdAstar(edges_sql, start_vid, end_vids [, directed, heuristic, factor, epsilon])
RETURNS SET OF (seq, path_seq, end_vid, node, edge, cost, agg_cost) or EMPTY SET
start_vid
to each end_vid
in end_vids
allowing the user to chooseExample: | Directed using Heuristic 3 and a factor of 3.5 |
---|
SELECT * FROM pgr_bdAstar(
'SELECT id, source, target, cost, reverse_cost, x1,y1,x2,y2
FROM edge_table',
2, ARRAY[3, 11],
heuristic := 3, factor := 3.5
);
seq | path_seq | end_vid | node | edge | cost | agg_cost
-----+----------+---------+------+------+------+----------
1 | 1 | 3 | 2 | 4 | 1 | 0
2 | 2 | 3 | 5 | 8 | 1 | 25.5
3 | 3 | 3 | 6 | 9 | 1 | 38.75
4 | 4 | 3 | 9 | 16 | 1 | 64.25
5 | 5 | 3 | 4 | 3 | 1 | 65.25
6 | 6 | 3 | 3 | -1 | 0 | 66.25
7 | 1 | 11 | 2 | 4 | 1 | 0
8 | 2 | 11 | 5 | 8 | 1 | 1
9 | 3 | 11 | 6 | 11 | 1 | 2
10 | 4 | 11 | 11 | -1 | 0 | 3
(10 rows)
pgr_bdAstar(edges_sql, start_vids, end_vid [, directed, heuristic, factor, epsilon])
RETURNS SET OF (seq, path_seq, start_vid, node, edge, cost, agg_cost) or EMPTY SET
start_vid
in start_vids
to the end_vid
allowing the user to chooseExample: | Undirected graph with Heuristic 4 |
---|
SELECT * FROM pgr_bdAstar(
'SELECT id, source, target, cost, reverse_cost, x1,y1,x2,y2
FROM edge_table',
ARRAY[2, 7], 3,
false, heuristic := 4
);
seq | path_seq | start_vid | node | edge | cost | agg_cost
-----+----------+-----------+------+------+------+------------------
1 | 1 | 2 | 2 | 2 | 1 | 0
2 | 2 | 2 | 3 | -1 | 0 | 1
3 | 1 | 7 | 7 | 6 | 1 | 0
4 | 2 | 7 | 8 | 7 | 1 | 3.23606797749979
5 | 3 | 7 | 5 | 8 | 1 | 5.65028153987288
6 | 4 | 7 | 6 | 5 | 1 | 6.65028153987288
7 | 5 | 7 | 3 | -1 | 0 | 7.65028153987288
(7 rows)
pgr_bdAstar(edges_sql, start_vids, end_vids [, directed, heuristic, factor, epsilon])
RETURNS SET OF (seq, path_seq, start_vid, end_vid, node, edge, cost, agg_cost) or EMPTY SET
start_vid
in start_vids
to each end_vid
in end_vids
allowing the user to chooseExample: | Directed graph with a factor of 0.5 |
---|
SELECT * FROM pgr_bdAstar(
'SELECT id, source, target, cost, reverse_cost, x1,y1,x2,y2
FROM edge_table',
ARRAY[2, 7], ARRAY[3, 11],
factor := 0.5
);
seq | path_seq | start_vid | end_vid | node | edge | cost | agg_cost
-----+----------+-----------+---------+------+------+------+----------
1 | 1 | 2 | 3 | 2 | 4 | 1 | 0
2 | 2 | 2 | 3 | 5 | 8 | 1 | 2
3 | 3 | 2 | 3 | 6 | 9 | 1 | 3.5
4 | 4 | 2 | 3 | 9 | 16 | 1 | 4.5
5 | 5 | 2 | 3 | 4 | 3 | 1 | 5.5
6 | 6 | 2 | 3 | 3 | -1 | 0 | 6.5
7 | 1 | 2 | 11 | 2 | 4 | 1 | 0
8 | 2 | 2 | 11 | 5 | 8 | 1 | 1
9 | 3 | 2 | 11 | 6 | 11 | 1 | 2
10 | 4 | 2 | 11 | 11 | -1 | 0 | 3
11 | 1 | 7 | 3 | 7 | 6 | 1 | 0
12 | 2 | 7 | 3 | 8 | 7 | 1 | 2.5
13 | 3 | 7 | 3 | 5 | 8 | 1 | 4.5
14 | 4 | 7 | 3 | 6 | 9 | 1 | 6
15 | 5 | 7 | 3 | 9 | 16 | 1 | 7
16 | 6 | 7 | 3 | 4 | 3 | 1 | 8
17 | 7 | 7 | 3 | 3 | -1 | 0 | 9
18 | 1 | 7 | 11 | 7 | 6 | 1 | 0
19 | 2 | 7 | 11 | 8 | 7 | 1 | 1
20 | 3 | 7 | 11 | 5 | 8 | 1 | 2
21 | 4 | 7 | 11 | 6 | 11 | 1 | 3
22 | 5 | 7 | 11 | 11 | -1 | 0 | 4
(22 rows)
edges_sql: | an SQL query, which should return a set of rows with the following columns: |
---|
Column | Type | Default | Description |
---|---|---|---|
id | ANY-INTEGER |
Identifier of the edge. | |
source | ANY-INTEGER |
Identifier of the first end point vertex of the edge. | |
target | ANY-INTEGER |
Identifier of the second end point vertex of the edge. | |
cost | ANY-NUMERICAL |
Weight of the edge (source, target)
|
|
reverse_cost | ANY-NUMERICAL |
-1 | Weight of the edge (target, source),
|
x1 | ANY-NUMERICAL |
X coordinate of source vertex. | |
y1 | ANY-NUMERICAL |
Y coordinate of source vertex. | |
x2 | ANY-NUMERICAL |
X coordinate of target vertex. | |
y2 | ANY-NUMERICAL |
Y coordinate of target vertex. |
Where:
ANY-INTEGER: | SMALLINT, INTEGER, BIGINT |
---|---|
ANY-NUMERICAL: | SMALLINT, INTEGER, BIGINT, REAL, FLOAT |
Parameter | Type | Description |
---|---|---|
edges_sql | TEXT |
Edges SQL query as described above. |
start_vid | ANY-INTEGER |
Starting vertex identifier. |
start_vids | ARRAY[ANY-INTEGER] |
Starting vertices identifierers. |
end_vid | ANY-INTEGER |
Ending vertex identifier. |
end_vids | ARRAY[ANY-INTEGER] |
Ending vertices identifiers. |
directed | BOOLEAN |
|
heuristic | INTEGER |
(optional). Heuristic number. Current valid values 0~5. Default
|
factor | FLOAT |
(optional). For units manipulation. \(factor > 0\). Default 1 . see Factor |
epsilon | FLOAT |
(optional). For less restricted results. \(epsilon >= 1\). Default 1 . |
Returns set of (seq, path_seq [, start_vid] [, end_vid], node, edge, cost, agg_cost)
Column | Type | Description |
---|---|---|
seq | INT |
Sequential value starting from 1. |
path_id | INT |
Path identifier. Has value 1 for the first of a path. Used when there are multiple paths for the same start_vid to end_vid combination. |
path_seq | INT |
Relative position in the path. Has value 1 for the beginning of a path. |
start_vid | BIGINT |
Identifier of the starting vertex. Used when multiple starting vetrices are in the query. |
end_vid | BIGINT |
Identifier of the ending vertex. Used when multiple ending vertices are in the query. |
node | BIGINT |
Identifier of the node in the path from start_vid to end_vid . |
edge | BIGINT |
Identifier of the edge used to go from node to the next node in the path sequence. -1 for the last node of the path. |
cost | FLOAT |
Cost to traverse from node using edge to the next node in the path sequence. |
agg_cost | FLOAT |
Aggregate cost from start_v to node . |
Indices and tables