pgr_withPointsCostMatrix
- Calculates the shortest path and returns only the aggregate cost of the shortest path(s) found, for the combination of points given.
Warning
Proposed functions for next mayor release.
Availability
Summary
pgr_withPointsCostMatrix(edges_sql, points_sql, start_vids [, directed] [, driving_side])
RETURNS SET OF (start_vid, end_vid, agg_cost)
Note
There is no details flag, unlike the other members of the withPoints family of functions.
Using default
pgr_withPointsCostMatrix(edges_sql, points_sql, start_vid)
RETURNS SET OF (start_vid, end_vid, agg_cost)
Example: | Cost matrix for points \(\{1, 6\}\) and vertices \(\{3, 6\}\) on a directed graph |
---|
SELECT * FROM pgr_withPointsCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
'SELECT pid, edge_id, fraction from pointsOfInterest',
array[-1, 3, 6, -6]);
start_vid | end_vid | agg_cost
-----------+---------+----------
-6 | -1 | 1.3
-6 | 3 | 4.3
-6 | 6 | 1.3
-1 | -6 | 1.3
-1 | 3 | 5.6
-1 | 6 | 2.6
3 | -6 | 1.7
3 | -1 | 1.6
3 | 6 | 1
6 | -6 | 1.3
6 | -1 | 2.6
6 | 3 | 3
(12 rows)
pgr_withPointsCostMatrix(edges_sql, points_sql, start_vids,
directed:=true, driving_side:='b')
RETURNS SET OF (start_vid, end_vid, agg_cost)
Example: | Cost matrix for points \(\{1, 6\}\) and vertices \(\{3, 6\}\) on an undirected graph |
---|
SELECT * FROM pgr_withPointsCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
'SELECT pid, edge_id, fraction from pointsOfInterest',
array[-1, 3, 6, -6], directed := false);
start_vid | end_vid | agg_cost
-----------+---------+----------
-6 | -1 | 1.3
-6 | 3 | 1.7
-6 | 6 | 1.3
-1 | -6 | 1.3
-1 | 3 | 1.6
-1 | 6 | 2.6
3 | -6 | 1.7
3 | -1 | 1.6
3 | 6 | 1
6 | -6 | 1.3
6 | -1 | 2.6
6 | 3 | 1
(12 rows)
Parameter | Type | Description |
---|---|---|
edges_sql | TEXT |
Edges SQL query as described above. |
points_sql | TEXT |
Points SQL query as described above. |
start_vids | ARRAY[ANY-INTEGER] |
Array of identifiers of starting vertices. When negative: is a point’s pid. |
directed | BOOLEAN |
(optional). When false the graph is considered as Undirected. Default is true which considers the graph as Directed. |
driving_side | CHAR |
|
Returns SET OF (start_vid, end_vid, agg_cost)
Column | Type | Description |
---|---|---|
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. |
agg_cost | FLOAT |
Aggregate cost from start_vid to end_vid . |
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),
|
Where:
ANY-INTEGER: | SMALLINT, INTEGER, BIGINT |
---|---|
ANY-NUMERICAL: | SMALLINT, INTEGER, BIGINT, REAL, FLOAT |
Description of the Points SQL query
points_sql: | an SQL query, which should return a set of rows with the following columns: |
---|
Column | Type | Description |
---|---|---|
pid | ANY-INTEGER |
(optional) Identifier of the point.
|
edge_id | ANY-INTEGER |
Identifier of the “closest” edge to the point. |
fraction | ANY-NUMERICAL |
Value in <0,1> that indicates the relative postition from the first end point of the edge. |
side | CHAR |
(optional) Value in [‘b’, ‘r’, ‘l’, NULL] indicating if the point is:
|
Where:
ANY-INTEGER: | smallint, int, bigint |
---|---|
ANY-NUMERICAL: | smallint, int, bigint, real, float |
Example: | pgr_TSP using pgr_withPointsCostMatrix for points \(\{1, 6\}\) and vertices \(\{3, 6\}\) on an undirected graph |
---|
SELECT * FROM pgr_TSP(
$$
SELECT * FROM pgr_withPointsCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
'SELECT pid, edge_id, fraction from pointsOfInterest',
array[-1, 3, 6, -6], directed := false);
$$,
randomize := false
);
seq | node | cost | agg_cost
-----+------+------+----------
1 | -6 | 1.3 | 0
2 | -1 | 1.6 | 1.3
3 | 3 | 1 | 2.9
4 | 6 | 1.3 | 3.9
5 | -6 | 0 | 5.2
(5 rows)
Indices and tables