pgr_dijkstraCostMatrix¶

pgr_dijkstraCostMatrix - Calculates the a cost matrix using pgr_dijktras.

Boost Graph Inside

Availability

• Version 3.0.0

• Official function

• Version 2.3.0

• New proposed function

• Supported versions: current(3.0)

• Unsupported versions: 2.6 2.5 2.4 2.3

Description¶

Using Dijkstra algorithm, calculate and return a cost matrix.

Signatures¶

Summary

pgr_dijkstraCostMatrix(edges_sql, start_vids [, directed])
RETURNS SET OF (start_vid, end_vid, agg_cost)


Using defaults

pgr_dijkstraCostMatrix(edges_sql, start_vid)
RETURNS SET OF (start_vid, end_vid, agg_cost)

Example

Cost matrix for vertices $$\{1, 2, 3, 4\}$$ on a directed graph

SELECT * FROM pgr_dijkstraCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
(SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5)
);
start_vid | end_vid | agg_cost
-----------+---------+----------
1 |       2 |        1
1 |       3 |        6
1 |       4 |        5
2 |       1 |        1
2 |       3 |        5
2 |       4 |        4
3 |       1 |        2
3 |       2 |        1
3 |       4 |        3
4 |       1 |        3
4 |       2 |        2
4 |       3 |        1
(12 rows)



Complete Signature¶

pgr_dijkstraCostMatrix(edges_sql, start_vids [, directed])
RETURNS SET OF (start_vid, end_vid, agg_cost)

Example

Symmetric cost matrix for vertices $$\{1, 2, 3, 4\}$$ on an undirected graph

SELECT * FROM pgr_dijkstraCostMatrix(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
(SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5),
false
);
start_vid | end_vid | agg_cost
-----------+---------+----------
1 |       2 |        1
1 |       3 |        2
1 |       4 |        3
2 |       1 |        1
2 |       3 |        1
2 |       4 |        2
3 |       1 |        2
3 |       2 |        1
3 |       4 |        1
4 |       1 |        3
4 |       2 |        2
4 |       3 |        1
(12 rows)



Parameters¶

Parameter

Type

Description

edges_sql

TEXT

Edges SQL query as described above.

start_vids

ARRAY[ANY-INTEGER]

Array of identifiers of the vertices.

directed

BOOLEAN

(optional). When false the graph is considered as Undirected. Default is true which considers the graph as Directed.

Inner query¶

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)

• When negative: edge (source, target) does not exist, therefore it’s not part of the graph.

reverse_cost

ANY-NUMERICAL

-1

Weight of the edge (target, source),

• When negative: edge (target, source) does not exist, therefore it’s not part of the graph.

Where:

ANY-INTEGER

SMALLINT, INTEGER, BIGINT

ANY-NUMERICAL

SMALLINT, INTEGER, BIGINT, REAL, FLOAT

Return Columns¶

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.

Example

Use with tsp

SELECT * FROM pgr_TSP(
$$SELECT * FROM pgr_dijkstraCostMatrix( 'SELECT id, source, target, cost, reverse_cost FROM edge_table', (SELECT array_agg(id) FROM edge_table_vertices_pgr WHERE id < 5), false )$$,
randomize := false
);
seq | node | cost | agg_cost
-----+------+------+----------
1 |    1 |    1 |        0
2 |    2 |    1 |        1
3 |    3 |    1 |        2
4 |    4 |    3 |        3
5 |    1 |    0 |        6
(5 rows)