Kreisel-Separatorliste (list_trackids) im CSV-Export ergaenzt
Kreisel bekommen wie VF_n/GF_n ein Merkmal mit der Reihenfolge aller Separator-/BTMT-Beladung-/BTMT-Entladung-TeileIds entlang der Bahn, sortiert nach Winkel um die Kreiselachse (Start bei 0 Grad in Drehrichtung DREHRICHTUNG) - nutzt dieselbe Umlauf-Logik, die bisher nur die "Nachbarn"-Spalte gespeist hat. Merkmal-Schluessel einheitlich auf "list_trackids" umbenannt (vorher "Separatorlist" bei VF/GF). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+42
-4
@@ -199,11 +199,13 @@ Geometrie der bereits klassifizierten Items abgeleitet:
|
||||
### 4. Der Kreisel-Umlauf — wie Nachbarn ueber einen Kreisel hinweg entstehen
|
||||
|
||||
`compute_kreisel_umlauf` ist der zentrale Baustein, der Ketten-Enden,
|
||||
freie Separatoren und Kreisel-Kreisel-Weichen zu einer widerspruchsfreien
|
||||
Nachbarschaft zusammenfuehrt. Fuer jeden echten Kreisel werden alle Punkte
|
||||
gesammelt, die dort geometrisch liegen:
|
||||
freie Punkte (Separatoren UND BTMT Beladung/Entladung) und Kreisel-Kreisel-
|
||||
Weichen zu einer widerspruchsfreien Nachbarschaft zusammenfuehrt. Fuer jeden
|
||||
echten Kreisel werden alle Punkte gesammelt, die dort geometrisch liegen:
|
||||
|
||||
- freie Separatoren, deren Bounding-Box die Kreisel-Box ueberschneidet,
|
||||
- freie Punkte (`KREISEL_UMLAUF_TEILEARTEN` in `lib/export_neighbors.py`:
|
||||
Separator, BTMT Beladung, BTMT Entladung — alles Stationen direkt auf der
|
||||
Bahn/dem Track), deren Bounding-Box die Kreisel-Box ueberschneidet,
|
||||
- die Kreisel-Kreisel-Weichen aus Schritt 3 (in BEIDEN beteiligten
|
||||
Kreisel-Umlaeufen, da eine Weiche der gemeinsame Verzweigungspunkt ist —
|
||||
man kann von Kreisel A nach B und zurueck),
|
||||
@@ -252,6 +254,42 @@ plus den naechstgelegenen rohen INSERT-Punkt (Item-Felder `_x`/`_y` vs. die
|
||||
sepliste-Koordinate) — beide stammen aus derselben Bauphase und liegen daher
|
||||
nah beieinander, auch wenn sie nicht exakt uebereinstimmen.
|
||||
|
||||
### Das Merkmal `"list_trackids"` — Reihenfolge als Item-Merkmal
|
||||
|
||||
Zusaetzlich zur `"Nachbarn"`-Spalte (Vorgaenger/Nachfolger je Zeile) traegt
|
||||
`write_separatorliste_merkmale` (`lib/export_csv.py`) jeder VF_n/GF_n-Zeile
|
||||
das Merkmal `"list_trackids"` ein: die TeileIds ihrer SEP-Eintraege in
|
||||
Baureihenfolge, kommagetrennt (z.B. `"0052, 0053, 0054"`). Quelle ist die
|
||||
rohe `sepliste` des Items (nicht `sep_kette`, dessen dict-Reihenfolge nicht
|
||||
garantiert ist). Muss NACH `map_separator_kette_items` laufen, weil erst
|
||||
dann jeder sepliste-SEP-Schluessel auf sein reales Separator-Item (TeileId)
|
||||
aufgeloest ist.
|
||||
|
||||
`write_kreisel_separatorliste_merkmale` ueberträgt dasselbe Prinzip auf
|
||||
echte Kreisel (`"ILS 2.0 Kreisel"`): Quelle ist hier NICHT die sepliste
|
||||
(die kennt nur eine einzelne VF_n/GF_n-Kette), sondern
|
||||
`compute_kreisel_umlauf` (`lib/export_neighbors.py`) — der bereits fuer die
|
||||
Kreisel-`"Nachbarn"`-Spalte berechnete, zirkulaere Umlauf aller auf dem
|
||||
Kreisel liegenden Punkte (freie Punkte — Separator UND BTMT Beladung/
|
||||
Entladung, siehe `KREISEL_UMLAUF_TEILEARTEN` —, AS/ES-Enden andockender
|
||||
VF_n/GF_n-Ketten, Kreisel-Kreisel-Weichen), sortiert nach Winkel um die
|
||||
Kreiselachse in Richtung des `DREHRICHTUNG`-Attributs (UZS/GUZ). Die
|
||||
zurueckgegebene Liste beginnt IMMER bei Winkel 0 Grad (Kapsel-Achsrichtung,
|
||||
kleinster Winkel >= 0 Grad in Umlaufrichtung) — `write_kreisel_
|
||||
separatorliste_merkmale` loest die rohen Umlauf-Schluessel (TeileId eines
|
||||
freien Punkts, sep_kette-Schluessel oder Weichen-Key) auf echte TeileIds auf
|
||||
und schreibt sie kommagetrennt als `"list_trackids"` auf den Kreisel selbst.
|
||||
Muss darum NACH `resolve_umlauf_und_sepliste_nachbarn` (bzw. nach allen
|
||||
Zeilen-Registrierungen: `build_kreisel_weiche_items`, `build_strecke_
|
||||
schleus_items`, `map_separator_kette_items`) laufen.
|
||||
|
||||
BTMT Beladung/Entladung sind bewusst NICHT in `SENSOR_TEILEARTEN`
|
||||
aufgenommen (die bleibt Separator/Scanner vorbehalten, siehe
|
||||
`compute_sensor_zuordnung`/`compute_scanner_nearest_separator` in Abschnitt
|
||||
6) — eine eigene Konstante `KREISEL_UMLAUF_TEILEARTEN` sammelt stattdessen
|
||||
genau die TeileArten, die als frei platzierter Punkt auf einer Kreisel-Bahn
|
||||
liegen koennen.
|
||||
|
||||
### 6. Sensor-Zuordnung, Ausgabe
|
||||
|
||||
`compute_sensor_zuordnung` bestimmt fuer jeden Separator/Scanner ohne
|
||||
|
||||
Reference in New Issue
Block a user