TrackIds von VF/GF-Strecken um AS-/ES-Kettenenden ergaenzt
write_separatorliste_merkmale liess bisher nur "SEP"-Eintraege der sepliste in die "TrackIds"-Spalte einfliessen; die AS-/ES-Ausschleus- /Einschleuselemente an Anfang und Ende der Kette fehlten dadurch, obwohl sie beim Kreisel (compute_kreisel_umlauf) bereits Teil von dessen TrackIds sind. Jetzt werden alle sepliste-Eintraege (AS, SEP, ES) in Baureihenfolge aufgeloest. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+19
-16
@@ -852,21 +852,27 @@ def resolve_umlauf_und_sepliste_nachbarn(items, kreisel_umlauf, sep_kette,
|
||||
|
||||
def write_separatorliste_merkmale(items, sep_kette_by_key, dbg=None):
|
||||
"""Traegt in jede Strecke (VF_n/GF_n mit "sepliste") die eigene CSV-Spalte
|
||||
"TrackIds" (item["trackids"]) ein: die TeileIds ihrer Separatoren in
|
||||
Baureihenfolge, kommagetrennt (analog zur "Nachbarn"-Spalte, ebenfalls
|
||||
ein Top-Level-Item-Feld statt eines Merkmals), z.B. "0052, 0053, 0054".
|
||||
"TrackIds" (item["trackids"]) ein: die TeileIds von AS-Ende, Separatoren
|
||||
und ES-Ende in Baureihenfolge, kommagetrennt (analog zur "Nachbarn"-
|
||||
Spalte, ebenfalls ein Top-Level-Item-Feld statt eines Merkmals), z.B.
|
||||
"0051, 0052, 0053, 0054, 0055" (AS ... SEP ... ES).
|
||||
|
||||
Quelle ist die rohe "sepliste" des Items (AS/SEP/ES mit x/y, bereits in
|
||||
Baureihenfolge - siehe compute_sep_kette) statt sep_kette selbst: dessen
|
||||
dict-Reihenfolge ist nicht garantiert, die sepliste-Liste dagegen schon.
|
||||
Nur "SEP"-Eintraege zaehlen als Separator, AS/ES sind die Schleus-Enden
|
||||
der Kette (siehe build_strecke_schleus_items), keine Separatoren.
|
||||
AS/ES zaehlen HIER mit (anders als beim "Separatorlist"-Merkmal frueher) -
|
||||
sie sind die Schleus-Enden der Kette (siehe build_strecke_schleus_items)
|
||||
und bekommen dort eine eigene TeileId ("ILS Ausschleuselement"/"ILS
|
||||
Einschleuselement"), analog zu den AS/ES-Enden, die beim Kreisel bereits
|
||||
ueber compute_kreisel_umlauf in dessen TrackIds auftauchen - ohne sie
|
||||
fehlten hier die Kettenenden, obwohl sie beim Kreisel schon drin sind.
|
||||
|
||||
Der eigentliche Separator wurde bereits von map_separator_kette_items ueber
|
||||
die sepliste-Koordinate (x/y) auf sein reales Separator-Item (TeileId)
|
||||
aufgeloest und unter demselben "<strecke_id>#<lfdnr>"-Schluessel in
|
||||
sep_kette_by_key eingetragen - hier wird dieser Schluessel nur noch je
|
||||
Strecke eingesammelt. Muss darum NACH map_separator_kette_items laufen.
|
||||
aufgeloest, AS/ES von build_strecke_schleus_items - beide unter demselben
|
||||
"<strecke_id>#<lfdnr>"-Schluessel in sep_kette_by_key eingetragen; hier
|
||||
wird dieser Schluessel nur noch je Strecke eingesammelt. Muss darum NACH
|
||||
map_separator_kette_items/build_strecke_schleus_items laufen.
|
||||
"""
|
||||
for item in items:
|
||||
if item.get("teileart", "") not in GF_VF_TEILEARTEN:
|
||||
@@ -875,20 +881,17 @@ def write_separatorliste_merkmale(items, sep_kette_by_key, dbg=None):
|
||||
if not sepliste:
|
||||
continue
|
||||
sid = item.get("teileid", "")
|
||||
separator_ids = []
|
||||
track_ids = []
|
||||
for entry in sepliste:
|
||||
if entry.get("typ") != "SEP":
|
||||
continue
|
||||
key = f"{sid}#{entry.get('lfdnr')}"
|
||||
sep_item = sep_kette_by_key.get(key)
|
||||
if sep_item is None:
|
||||
if dbg:
|
||||
dbg(f" TrackIds {key}: kein aufgeloestes Separator-Item "
|
||||
f"- uebersprungen")
|
||||
dbg(f" TrackIds {key}: kein aufgeloestes Item - uebersprungen")
|
||||
continue
|
||||
separator_ids.append(sep_item.get("teileid", ""))
|
||||
if separator_ids:
|
||||
item["trackids"] = ", ".join(separator_ids)
|
||||
track_ids.append(sep_item.get("teileid", ""))
|
||||
if track_ids:
|
||||
item["trackids"] = ", ".join(track_ids)
|
||||
|
||||
|
||||
def write_kreisel_separatorliste_merkmale(items, kreisel_umlauf, sep_kette_by_key,
|
||||
|
||||
Reference in New Issue
Block a user