liniengraph
Classes:
-
LinienGraph–Zugverbindungen zwischen Bahnhöfen.
-
Strecken–Strecken
LinienGraph
flowchart TD
stskit.model.liniengraph.LinienGraph[LinienGraph]
click stskit.model.liniengraph.LinienGraph href "" "stskit.model.liniengraph.LinienGraph"
Zugverbindungen zwischen Bahnhöfen.
Dieser Graph zeigt bediente Verbindungen zwischen Bahnhöfen. Der Graph wird anhand der Zugfahrpläne erstellt.
Methods:
-
distanz–Distanz zwischen zwei Bahnhöfen
-
export_konfiguration–Streckenmarkierung in Konfigurationsformat exportieren
-
import_konfiguration–Streckenmarkierungen aus der Konfiguration übernehmen
-
label–Das Label vom Liniengraph entspricht dem des BahnsteigGraph, i.d.R. auf Stufe Bf und Anst.
-
linie_eintragen–Liniengraph erstellen
-
schleifen_aufloesen–Schleifen auflösen
-
strecke–Kürzeste Verbindung zwischen zwei Punkten bestimmen.
-
strecken_vorschlagen–Strecken aus Liniengraph vorschlagen
-
strecken_zeitachse–Distanzen entlang einer Strecke berechnen
Source code in stskit/model/liniengraph.py
distanz
distanz(u: BahnhofElement, v: BahnhofElement, metrik: str) -> Any
Distanz zwischen zwei Bahnhöfen
Es muss eine direkte Kante zwischen den zwei Bahnhöfen bestehen.
Parameters:
-
(uBahnhofElement) –Erste Betriebsstelle (Bf oder Anst)
-
(vBahnhofElement) –Zweite Betriebsstelle (Bf oder Anst)
-
(metrikstr) –Kantenattribut im Liniengraph: fahrzeit_min, fahrzeit_schnitt oder fahrzeit_max.
Source code in stskit/model/liniengraph.py
export_konfiguration
Streckenmarkierung in Konfigurationsformat exportieren
Source code in stskit/model/liniengraph.py
import_konfiguration
import_konfiguration(streckenmarkierung_konfig: Iterable[dict[str, Any]], bahnhofgraph: BahnhofGraph)
Streckenmarkierungen aus der Konfiguration übernehmen
Source code in stskit/model/liniengraph.py
label
staticmethod
Das Label vom Liniengraph entspricht dem des BahnsteigGraph, i.d.R. auf Stufe Bf und Anst.
linie_eintragen
linie_eintragen(ziel1: ZielGraphNode, bahnhof1: BahnsteigGraphNode, ziel2: ZielGraphNode, bahnhof2: BahnsteigGraphNode)
Liniengraph erstellen
Sollte nicht mehr als einmal pro Zug aufgerufen werden, da sonst die Statistik verfälscht werden kann.
Source code in stskit/model/liniengraph.py
schleifen_aufloesen
Schleifen auflösen
Weil Züge nicht alle Haltestellen bedienen, kann es im Liniengraph mehrere Verbindungen zwischen zwei Knoten geben, die im Graphen eine Schleife (cycle) bilden. Damit eine Strecke möglichst dem tatsächlichen Gleisverlauf folgt, löst diese Funktion solche Schleifen auf, indem sie die längste Kante jeder Schleife entfernt. Die Länge der Kante ist die minimale Fahrzeit zwischen den Knoten.
Wenn die längste Kante nicht eindeutig bestimmt werden kann, wird die Schleife nicht aufgelöst. Dies kann z.B. der Fall sein, wenn die Fahrzeit zwischen allen Knoten gleich lang ist, weil der durchfahrende Zug die Zeit zum Anhalten und Beschleunigen einspart. Die Funktion versucht, solche Fälle aufzulösen, indem sie Verbindungen zwischen Knoten mit Grad > 2 künstlich verlängert.
Note
Diese Methode entfernt Elemente aus dem Liniengraph, was die Darstellung des Streckenfahrplans behindern kann. Bei Anwendungen, die keine Schleifen erlauben, sollte die Methode auf eine private Kopie angewendet werden!
Source code in stskit/model/liniengraph.py
strecke
Kürzeste Verbindung zwischen zwei Punkten bestimmen.
Start und Ziel sind die Labels zweier beliebiger Knoten im Liniengraph. Die berechnete Strecke ist eine geordnete Liste von Labels.
Da die Streckenberechnung aufwändig sein kann, werden die Resultate im
_strecken_cache gespeichert. Der Cache muss gelöscht werden, wenn der
Graph verändert wird.
Parameters:
-
(startLinienLabelType) –Bahnhof- oder Anschlussname.
-
(zielLinienLabelType) –Bahnhof- oder Anschlussname.
Returns:
-
list[LinienLabelType]–Liste von befahrenen Gleisgruppen vom Start zum Ziel.
-
list[LinienLabelType]–Die Liste kann leer sein, wenn kein Pfad gefunden wurde.
Source code in stskit/model/liniengraph.py
strecken_vorschlagen
strecken_vorschlagen(min_fahrten: int = 0, min_laenge: int = 2) -> list[list[LinienLabelType]]
Strecken aus Liniengraph vorschlagen
Diese Funktion bestimmt die kürzesten Strecken zwischen allen Kombinationen von Anschlüssen. Wenig frequentierte Anschlüsse können ausgeschlossen werden.
Eine Strecke besteht aus einer Liste von Bahnhöfen inklusive Einfahrt am Anfang und Ausfahrt am Ende. Die Elemente sind Knotenlabels des Liniengraphen.
Parameters:
-
(min_fahrtenint, default:0) –Minimale Anzahl von Fahrten, die ein Anschluss aufweisen muss, um in die Auswahl aufgenommen zu werden. Per default (0), werden auch Strecken zwischen unbenutzten Anschlüssen erstellt.
-
(min_laengeint, default:2) –Minimale Länge (Anzahl Wegpunkte) einer Strecke. Kürzere Strecken werden ignoriert. Die Defaultlänge 2 liefert auch direkte Strecken zwischen Einfahrt und Ausfahrt.
Returns:
Source code in stskit/model/liniengraph.py
strecken_zeitachse
strecken_zeitachse(strecke: Sequence[BahnhofElement], metrik: str = 'fahrzeit_min') -> Sequence[int | float]
Distanzen entlang einer Strecke berechnen
Kumulierte Distanzen der Haltepunkte ab dem ersten Punkt der Strecke berechnen. Die Distanz wird als Fahrzeit in Minuten angegeben.
Als Fahrzeit wird für jeden Abschnitt der erste der folgenden Werte genommen, der grösser als Null ist: 1. 'fahrzeit_manuell'-Attribut der Liniengraph-Kante (vom Benutzer konfiguriert). 2. Vom parameter-Argument bezeichnetes Attribut der Liniengraph-Kante. 3. 1 (default, auch bei fehlender Kante im Liniengraph).
Parameters:
-
(streckeSequence[BahnhofElement]) –Liste von Linienpunkten
-
(metrikstr, default:'fahrzeit_min') –Kantenattribut im Liniengraph: fahrzeit_min, fahrzeit_schnitt oder fahrzeit_max.
distanz = Fahrzeit in Minuten.
-
Sequence[int | float]–Die Liste enthält die gleiche Anzahl Elemente wie die Strecke.
-
Sequence[int | float]–Das erste Element ist 0.
Source code in stskit/model/liniengraph.py
Strecken
Strecken
Verwaltet konfigurierte Verbindungen zwischen Bahnhöfen. Strecken werden aus dem Liniengraph automatisch erstellt oder aus der Konfiguration gelesen.
Attributes:
-
liniengraph(LinienGraph | None) –Zugeordneter Liniengraph
-
strecken(dict[str, Sequence[BahnhofElement]]) –Die Streckendefinition ist ein Dictionary Streckenname zu Listen von Stationen.
-
ordnung(dict[str, int]) –Die Streckenliste wird anhand dieses Index sortiert.
-
auto(dict[str, bool]) –Strecke wurde automatisch generiert. False, wenn der Benutzer sie bearbeitet hat.
-
hauptstrecke(str | None) –Name der Hauptstrecke. Wird beim Öffnen des Streckenfahrplans voreingestellt.
Methods:
-
add_strecke–Strecke definieren
-
clear–Alle Streckendefinitionen löschen
-
export_konfiguration–Streckendeklaration in Konfigurationsformat exportieren
-
import_konfiguration–Streckendefinition aus der Konfiguration übernehmen
-
remove_strecke–Streckendefinition entfernen
-
streckengraph–Strecke als Liniengraph darstellen
-
validate–Strecken mit Bahnhofgraph abgleichen
Source code in stskit/model/liniengraph.py
add_strecke
add_strecke(name: str, stationen: Iterable[BahnhofElement], ordnung: int = DEFAULT_SORT_KEY, auto: bool = True) -> None
Strecke definieren
Source code in stskit/model/liniengraph.py
clear
export_konfiguration
Streckendeklaration in Konfigurationsformat exportieren
Source code in stskit/model/liniengraph.py
import_konfiguration
import_konfiguration(strecken_konfig: Iterable[dict[str, Any]], bahnhofgraph: BahnhofGraph)
Streckendefinition aus der Konfiguration übernehmen
Source code in stskit/model/liniengraph.py
remove_strecke
remove_strecke(name: str)
Streckendefinition entfernen
Source code in stskit/model/liniengraph.py
streckengraph
streckengraph(strecke: str) -> LinienGraph
Strecke als Liniengraph darstellen
Kann nützlich sein, wenn auf Liniengraphdaten für eine Strecke zugegriffen werden soll. Das Resultat ist ein View und daher nicht veränderbar.
Todo: Mir ist noch nicht klar, wie dynamisch der View ist, d.h. ob Änderungen am Basisgraph automatisch sichtbar werden. Ausserdem: Können Attribute verändert werden?
Source code in stskit/model/liniengraph.py
validate
validate(bahnhofgraph: BahnhofGraph)
Strecken mit Bahnhofgraph abgleichen
Überprüft die Streckendefinitionen auf korrekte Stationen und entfernt nicht vorhandene Stationen. Bei weniger als zwei Stationen wird die Strecke gelöscht.