pgr_lineGraph - Experimental¶
pgr_lineGraph
— Transforms a given graph into its corresponding edge-based graph.
Warning
Possible server crash
These functions might create a server crash
Warning
Experimental functions
They are not officially of the current release.
They likely will not be officially be part of the next release:
The functions might not make use of ANY-INTEGER and ANY-NUMERICAL
Name might change.
Signature might change.
Functionality might change.
pgTap tests might be missing.
Might need c/c++ coding.
May lack documentation.
Documentation if any might need to be rewritten.
Documentation examples might need to be automatically generated.
Might need a lot of feedback from the comunity.
Might depend on a proposed function of pgRouting
Might depend on a deprecated function of pgRouting
Availability
Version 2.5.0
New Experimental function
Description¶
Given a graph G, its line graph L(G) is a graph such that:
Each vertex of L(G) represents an edge of G
Two vertices of L(G) are adjacent if and only if their corresponding edges share a common endpoint in G.
Signatures¶
Summary
pgr_lineGraph(edges_sql, directed)
RETURNS SET OF (seq, source, target, cost, reverse_cost)
OR EMPTY SET
Using defaults
pgr_lineGraph(edges_sql)
RETURNS SET OF (seq, source, target, cost, reverse_cost) OR EMPTY SET
- Example
For a directed graph
SELECT * FROM pgr_lineGraph(
'SELECT id, source, target, cost, reverse_cost FROM edge_table'
);
seq | source | target | cost | reverse_cost
-----+--------+--------+------+--------------
1 | -18 | 18 | 1 | 1
2 | -17 | 17 | 1 | 1
3 | -16 | -3 | 1 | -1
4 | -16 | 16 | 1 | 1
5 | -15 | -9 | 1 | 1
6 | -15 | 15 | 1 | 1
7 | -14 | -10 | 1 | 1
8 | -14 | 12 | 1 | -1
9 | -14 | 14 | 1 | 1
10 | -10 | -7 | 1 | 1
11 | -10 | -4 | 1 | 1
12 | -10 | 8 | 1 | 1
13 | -10 | 10 | 1 | 1
14 | -9 | -8 | 1 | 1
15 | -9 | 9 | 1 | 1
16 | -9 | 11 | 1 | -1
17 | -8 | -7 | 1 | 1
18 | -8 | -4 | 1 | 1
19 | -8 | 8 | 1 | 1
20 | -7 | -6 | 1 | 1
21 | -6 | 6 | 1 | 1
22 | -4 | -1 | 1 | 1
23 | -4 | 4 | 1 | 1
24 | -3 | -2 | 1 | -1
25 | -3 | 5 | 1 | -1
26 | -2 | -1 | 1 | -1
27 | -2 | 4 | 1 | -1
28 | -1 | 1 | 1 | 1
29 | 5 | -8 | 1 | -1
30 | 5 | 9 | 1 | -1
31 | 5 | 11 | 1 | -1
32 | 7 | -7 | 1 | 1
33 | 7 | -4 | 1 | 1
34 | 8 | 11 | 1 | -1
35 | 10 | 12 | 1 | -1
36 | 11 | 13 | 1 | -1
37 | 12 | 13 | 1 | -1
38 | 13 | -15 | 1 | -1
39 | 16 | -9 | 1 | 1
40 | 16 | 15 | 1 | 1
(40 rows)
Complete Signature¶
pgr_lineGraph(edges_sql, directed);
RETURNS SET OF (seq, source, target, cost, reverse_cost) OR EMPTY SET
- Example
For an undirected graph
SELECT * FROM pgr_lineGraph(
'SELECT id, source, target, cost, reverse_cost FROM edge_table',
FALSE
);
seq | source | target | cost | reverse_cost
-----+--------+--------+------+--------------
1 | -3 | -2 | 1 | -1
2 | -3 | 5 | 1 | -1
3 | -2 | 4 | 1 | -1
4 | 1 | 4 | 1 | -1
5 | 4 | 8 | 1 | -1
6 | 4 | 10 | 1 | -1
7 | 5 | 9 | 1 | -1
8 | 5 | 11 | 1 | -1
9 | 6 | 7 | 1 | -1
10 | 7 | 8 | 1 | -1
11 | 7 | 10 | 1 | -1
12 | 8 | 9 | 1 | -1
13 | 8 | 11 | 1 | -1
14 | 9 | 15 | 1 | -1
15 | 10 | 12 | 1 | -1
16 | 10 | 14 | 1 | -1
17 | 11 | 13 | 1 | -1
18 | 12 | 13 | 1 | -1
19 | 16 | 15 | 1 | -1
(19 rows)
Parameters¶
Column |
Type |
Description |
---|---|---|
edges_sql |
|
SQL query as described above. |
directed |
|
|
Inner query¶
Column |
Type |
Default |
Description |
---|---|---|---|
id |
|
Identifier of the edge. |
|
source |
|
Identifier of the first end point vertex of the edge. |
|
target |
|
Identifier of the second end point vertex of the edge. |
|
cost |
|
Weight of the edge (source, target)
|
|
reverse_cost |
|
-1 |
Weight of the edge (target, source),
|
Where:
- ANY-INTEGER
SMALLINT, INTEGER, BIGINT
- ANY-NUMERICAL
SMALLINT, INTEGER, BIGINT, REAL, FLOAT
Result Columns¶
RETURNS SETOF (seq, source, target, cost, reverse_cost)
Column |
Type |
Description |
---|---|---|
seq |
|
Sequential value starting from 1. |
source |
|
Identifier of the source vertex of the current edge id.
|
target |
|
Identifier of the target vertex of the current edge id.
|
cost |
|
Weight of the edge (source, target).
|
reverse_cost |
|
Weight of the edge (target, source).
|
See Also¶
The queries use the Sample Data network.
Indices and tables