GraphViz
Installation unter Windows
Download unter http://www.graphviz.org/Download_windows.php. Installation der .msi
-Datei.
Installation unter Ubuntu / Debian
sudo apt-get install graphviz
Erzeugung .dot-File aus Datenbank
Gegeben: 3 Relationen (1. Attribut ist jeweils Primärschlüssel):
graph (g_id)
nodes (n_id, duration, city, street, ...)
edges (e_id, n1_id, n2_id, duration, edgecount, ...)
SQL-Statement für PostgreSQL zur Ausgabe des Graphen:
COPY (
SELECT 'digraph g {' UNION ALL SELECT DISTINCT n_id || ' [label="' || city ||'-'|| street ||'"]'
FROM nodes
WHERE g_id = '1'
UNION ALL
SELECT DISTINCT n1_id || ' -> ' || n2_id || '[label="' || duration || '-' || edgecount || '"]'
FROM edges
WHERE g_id = '1'
UNION ALL
SELECT '}'
) TO 'graph.dot';
Ergebnis in der Datei graph.dot
:
digraph g {
11 [label="Paderborn-Schütten Kamp 4"]
18 [label="Lünen-Brechtener Str. 26"]
19 [label="Castrop-Rauxel-Zum Düker 20"]
20 [label="Herne-Baukauer Str. 48"]
21 [label="Bochum-Hustadtring 67"]
22 [label="Bochum-Bonifatiusstr. 1 a"]
23 [label="Bochum-Sonnenleite 17"]
24 [label="Bochum-Am Heerbusch 29"]
26 [label="Hattingen-Kreisstr. 14"]
27 [label="Herten-Königsberger Str. 38 B"]
34 [label="Kreuztal-Aherhammer 1"]
35 [label="Hagen-Niedernhofstraße"]
36 [label="Hagen-Rönselstr. 13"]
11 -> 18[label="7592-1"]
18 -> 19[label="818-1"]
18 -> 35[label="1927-1"]
19 -> 27[label="895-1"]
20 -> 21[label="943-2"]
21 -> 18[label="1611-1"]
21 -> 22[label="359-1"]
21 -> 23[label="196-1"]
21 -> 34[label="6411-1"]
22 -> 35[label="1091-1"]
23 -> 35[label="1155-1"]
24 -> 20[label="878-1"]
26 -> 20[label="1380-1"]
26 -> 21[label="762-1"]
27 -> 21[label="1333-1"]
34 -> 11[label="8488-1"]
34 -> 26[label="6447-1"]
34 -> 35[label="5203-1"]
34 -> 36[label="5055-1"]
35 -> 24[label="1246-1"]
35 -> 34[label="5203-3"]
36 -> 26[label="1462-1"]
}
Erzeugen einer Grafik aus der .dot Datei
Per Befehlszeile kann eine Grafik erzeugt werden mit z. B.
dot -Tpng graph.dot > graph.png
dot -Tpdf graph.dot > graph.pdf
Beispiel-Graph
Die Graphik zu obiger graph.dot sieht dann so aus: