Gefällestrecke in Sivas und csv Exports eingebaut
This commit is contained in:
@@ -79,6 +79,25 @@ def build_weiche_merkmale(block, eintrag):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def build_variofoerderer_merkmale(block):
|
||||||
|
attribs = block.get("attribs", {})
|
||||||
|
return {
|
||||||
|
"Typ": attribs.get("TYP", ""),
|
||||||
|
"Seite": attribs.get("SEITE", ""),
|
||||||
|
"Winkel": attribs.get("WINKEL", ""),
|
||||||
|
"DeltaH_mm": attribs.get("DELTA_H", ""),
|
||||||
|
"DeltaL_mm": attribs.get("DELTA_L", ""),
|
||||||
|
"L_VF_m": attribs.get("L_VF_m", ""),
|
||||||
|
"L_GF_m": attribs.get("L_GF_m", ""),
|
||||||
|
"Montagehoehe_m": attribs.get("MONTAGEHOEHE_m", ""),
|
||||||
|
"Hoehe_Von_mm": attribs.get("HOEHE_VON", ""),
|
||||||
|
"Hoehe_Bis_mm": attribs.get("HOEHE_BIS", ""),
|
||||||
|
"Antriebfahrtrichtung": attribs.get("ANTRIEBFAHRTRICHTUNG", ""),
|
||||||
|
"Anzahl_Separator": attribs.get("ANZAHL_SEPARATOR", ""),
|
||||||
|
"Anzahl_Scanner": attribs.get("ANZAHL_SCANNER", ""),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def build_gerade_merkmale(block):
|
def build_gerade_merkmale(block):
|
||||||
return {
|
return {
|
||||||
"Anzahl der Separatoren": "0",
|
"Anzahl der Separatoren": "0",
|
||||||
@@ -135,6 +154,7 @@ def process_blocks(blocks, lookup):
|
|||||||
weiche_count = {}
|
weiche_count = {}
|
||||||
gerade_count = 0
|
gerade_count = 0
|
||||||
kreisel_count = 0
|
kreisel_count = 0
|
||||||
|
vf_count = 0
|
||||||
|
|
||||||
for block in blocks:
|
for block in blocks:
|
||||||
bname = block.get("block_name", "")
|
bname = block.get("block_name", "")
|
||||||
@@ -183,6 +203,19 @@ def process_blocks(blocks, lookup):
|
|||||||
})
|
})
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# VarioFoerderer Compound-Block (VF_N)
|
||||||
|
if bname.startswith("VF_"):
|
||||||
|
elem_nr += 1
|
||||||
|
vf_count += 1
|
||||||
|
items.append({
|
||||||
|
"nr": elem_nr,
|
||||||
|
"teileart": "VarioFoerderer",
|
||||||
|
"teileid": block.get("attribs", {}).get("ID", "0000"),
|
||||||
|
"bezeichnung": f"VarioFoerderer :{vf_count}",
|
||||||
|
"merkmale": build_variofoerderer_merkmale(block),
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
|
||||||
# ILS Kreisel (Compound-Bloecke mit Praefix KR_)
|
# ILS Kreisel (Compound-Bloecke mit Praefix KR_)
|
||||||
if bname.startswith("KR_"):
|
if bname.startswith("KR_"):
|
||||||
elem_nr += 1
|
elem_nr += 1
|
||||||
|
|||||||
+70
-12
@@ -64,6 +64,11 @@ def get_hoehe_mm(block):
|
|||||||
return v
|
return v
|
||||||
|
|
||||||
|
|
||||||
|
def get_id(block):
|
||||||
|
"""Liest das eindeutige ID-Attribut eines Blocks (von ssg-id-check-all vergeben)."""
|
||||||
|
return block.get("attribs", {}).get("ID", "")
|
||||||
|
|
||||||
|
|
||||||
def format_hoehe_m(hoehe_mm_str):
|
def format_hoehe_m(hoehe_mm_str):
|
||||||
"""Konvertiert mm-String nach m mit deutschem Dezimaltrennzeichen."""
|
"""Konvertiert mm-String nach m mit deutschem Dezimaltrennzeichen."""
|
||||||
try:
|
try:
|
||||||
@@ -129,12 +134,14 @@ def process_blocks(blocks, lookup):
|
|||||||
items - Liste der CSV-Zeilen als Dicts
|
items - Liste der CSV-Zeilen als Dicts
|
||||||
counters - Zaehler fuer ILS-Automation-Summierungszeile
|
counters - Zaehler fuer ILS-Automation-Summierungszeile
|
||||||
"""
|
"""
|
||||||
# Gruppen: sivasnr_str -> {anzahl, hoehe_mm}
|
# Gruppen: sivasnr_str -> {anzahl, hoehe_mm, ids}
|
||||||
bogen_groups = {} # sivasnr -> dict
|
bogen_groups = {} # sivasnr -> dict
|
||||||
weiche_groups = {} # sivasnr -> dict
|
weiche_groups = {} # sivasnr -> dict
|
||||||
# Gerade: artinr_str -> {anzahl, laenge_mm_total, hoehe_mm}
|
# Gerade: artinr_str -> {anzahl, laenge_mm_total, hoehe_mm, ids}
|
||||||
gerade_groups = {}
|
gerade_groups = {}
|
||||||
kreisel_list = [] # Liste von blocks
|
kreisel_list = [] # Liste von blocks
|
||||||
|
eckrad_ids = [] # IDs aller Eckrad-Bloecke
|
||||||
|
strecke_ids = [] # IDs aller Strecke-Module (VF_*, GF_*, Vario/Staustrecke)
|
||||||
|
|
||||||
counters = {
|
counters = {
|
||||||
"anzahl_boegen": 0,
|
"anzahl_boegen": 0,
|
||||||
@@ -181,14 +188,16 @@ def process_blocks(blocks, lookup):
|
|||||||
|
|
||||||
if typ == "bogen":
|
if typ == "bogen":
|
||||||
if sivasnr not in bogen_groups:
|
if sivasnr not in bogen_groups:
|
||||||
bogen_groups[sivasnr] = {"anzahl": 0, "hoehe_mm": hoehe}
|
bogen_groups[sivasnr] = {"anzahl": 0, "hoehe_mm": hoehe, "ids": []}
|
||||||
bogen_groups[sivasnr]["anzahl"] += 1
|
bogen_groups[sivasnr]["anzahl"] += 1
|
||||||
|
bogen_groups[sivasnr]["ids"].append(get_id(block))
|
||||||
counters["anzahl_boegen"] += 1
|
counters["anzahl_boegen"] += 1
|
||||||
|
|
||||||
elif typ == "weiche":
|
elif typ == "weiche":
|
||||||
if sivasnr not in weiche_groups:
|
if sivasnr not in weiche_groups:
|
||||||
weiche_groups[sivasnr] = {"anzahl": 0, "hoehe_mm": hoehe}
|
weiche_groups[sivasnr] = {"anzahl": 0, "hoehe_mm": hoehe, "ids": []}
|
||||||
weiche_groups[sivasnr]["anzahl"] += 1
|
weiche_groups[sivasnr]["anzahl"] += 1
|
||||||
|
weiche_groups[sivasnr]["ids"].append(get_id(block))
|
||||||
subtyp = classify_weiche(eintrag)
|
subtyp = classify_weiche(eintrag)
|
||||||
if subtyp == "einzelweiche":
|
if subtyp == "einzelweiche":
|
||||||
counters["anzahl_einzelweichen"] += 1
|
counters["anzahl_einzelweichen"] += 1
|
||||||
@@ -217,10 +226,12 @@ def process_blocks(blocks, lookup):
|
|||||||
pass
|
pass
|
||||||
if key not in gerade_groups:
|
if key not in gerade_groups:
|
||||||
gerade_groups[key] = {
|
gerade_groups[key] = {
|
||||||
"anzahl": 0, "laenge_mm": 0.0, "hoehe_mm": hoehe, "artinr": artinr
|
"anzahl": 0, "laenge_mm": 0.0, "hoehe_mm": hoehe,
|
||||||
|
"artinr": artinr, "ids": [],
|
||||||
}
|
}
|
||||||
gerade_groups[key]["anzahl"] += 1
|
gerade_groups[key]["anzahl"] += 1
|
||||||
gerade_groups[key]["laenge_mm"] += laenge
|
gerade_groups[key]["laenge_mm"] += laenge
|
||||||
|
gerade_groups[key]["ids"].append(get_id(block))
|
||||||
counters["gesamtlaenge_ap110"] += laenge
|
counters["gesamtlaenge_ap110"] += laenge
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -247,12 +258,57 @@ def process_blocks(blocks, lookup):
|
|||||||
# --- ILS Eckrad ---
|
# --- ILS Eckrad ---
|
||||||
if bname.startswith("ECKRAD_"):
|
if bname.startswith("ECKRAD_"):
|
||||||
counters["anzahl_eckraeder"] += 1
|
counters["anzahl_eckraeder"] += 1
|
||||||
|
eckrad_ids.append(get_id(block))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# --- ILS Strecke-Module (Vario/Staustrecke) ---
|
# --- VarioFoerderer Compound-Block (VF_N) ---
|
||||||
|
if bname.startswith("VF_"):
|
||||||
|
attribs = block.get("attribs", {})
|
||||||
|
counters["anzahl_variofoerderer"] += 1
|
||||||
|
strecke_ids.append(get_id(block))
|
||||||
|
try:
|
||||||
|
counters["laengen_variofoerderer"] += float(attribs.get("L_VF_m", "0") or "0")
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
counters["anzahl_separatoren"] += int(attribs.get("ANZAHL_SEPARATOR", "0") or "0")
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
counters["anzahl_scanner"] += int(attribs.get("ANZAHL_SCANNER", "0") or "0")
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
pass
|
||||||
|
if counters["anzahl_streckengruppen"] == 0:
|
||||||
|
counters["anzahl_streckengruppen"] = 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
# --- Gefaellestrecke Compound-Block (GF_N) ---
|
||||||
|
if bname.startswith("GF_"):
|
||||||
|
attribs = block.get("attribs", {})
|
||||||
|
counters["anzahl_variofoerderer"] += 1
|
||||||
|
counters["anzahl_gefaellestrecken"] += 1
|
||||||
|
strecke_ids.append(get_id(block))
|
||||||
|
try:
|
||||||
|
counters["laengen_gefaellestrecken"] += float(attribs.get("L_GF_m", "0") or "0")
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
counters["anzahl_separatoren"] += int(attribs.get("ANZAHL_SEPARATOR", "0") or "0")
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
counters["anzahl_scanner"] += int(attribs.get("ANZAHL_SCANNER", "0") or "0")
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
pass
|
||||||
|
if counters["anzahl_streckengruppen"] == 0:
|
||||||
|
counters["anzahl_streckengruppen"] = 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
# --- ILS Strecke-Module (Vario/Staustrecke, einzelne Komponenten in Modelspace) ---
|
||||||
for sb in STRECKE_BLOCKS:
|
for sb in STRECKE_BLOCKS:
|
||||||
if sb in bname:
|
if sb in bname:
|
||||||
counters["anzahl_variofoerderer"] += 1
|
counters["anzahl_variofoerderer"] += 1
|
||||||
|
strecke_ids.append(get_id(block))
|
||||||
break
|
break
|
||||||
|
|
||||||
# --- Zeilen aufbauen ---
|
# --- Zeilen aufbauen ---
|
||||||
@@ -269,7 +325,7 @@ def process_blocks(blocks, lookup):
|
|||||||
"anzahl": g["anzahl"],
|
"anzahl": g["anzahl"],
|
||||||
"laenge_mm": "",
|
"laenge_mm": "",
|
||||||
"hoehe_m": format_hoehe_m(g["hoehe_mm"]),
|
"hoehe_m": format_hoehe_m(g["hoehe_mm"]),
|
||||||
"details": {},
|
"details": {"IDs": g["ids"]},
|
||||||
})
|
})
|
||||||
nr += 1
|
nr += 1
|
||||||
|
|
||||||
@@ -283,7 +339,7 @@ def process_blocks(blocks, lookup):
|
|||||||
"anzahl": g["anzahl"],
|
"anzahl": g["anzahl"],
|
||||||
"laenge_mm": "",
|
"laenge_mm": "",
|
||||||
"hoehe_m": format_hoehe_m(g["hoehe_mm"]),
|
"hoehe_m": format_hoehe_m(g["hoehe_mm"]),
|
||||||
"details": {},
|
"details": {"IDs": g["ids"]},
|
||||||
})
|
})
|
||||||
nr += 1
|
nr += 1
|
||||||
|
|
||||||
@@ -297,12 +353,14 @@ def process_blocks(blocks, lookup):
|
|||||||
"anzahl": g["anzahl"],
|
"anzahl": g["anzahl"],
|
||||||
"laenge_mm": int(g["laenge_mm"]),
|
"laenge_mm": int(g["laenge_mm"]),
|
||||||
"hoehe_m": format_hoehe_m(g["hoehe_mm"]),
|
"hoehe_m": format_hoehe_m(g["hoehe_mm"]),
|
||||||
"details": {},
|
"details": {"IDs": g["ids"]},
|
||||||
})
|
})
|
||||||
nr += 1
|
nr += 1
|
||||||
|
|
||||||
for block in kreisel_list:
|
for block in kreisel_list:
|
||||||
sivasnr, teileart = ILS_SIVASNR["kreisel"]
|
sivasnr, teileart = ILS_SIVASNR["kreisel"]
|
||||||
|
details = build_kreisel_details(block)
|
||||||
|
details["ID"] = get_id(block)
|
||||||
items.append({
|
items.append({
|
||||||
"nr": nr,
|
"nr": nr,
|
||||||
"teileart": teileart,
|
"teileart": teileart,
|
||||||
@@ -312,7 +370,7 @@ def process_blocks(blocks, lookup):
|
|||||||
"anzahl": 1,
|
"anzahl": 1,
|
||||||
"laenge_mm": "",
|
"laenge_mm": "",
|
||||||
"hoehe_m": "",
|
"hoehe_m": "",
|
||||||
"details": build_kreisel_details(block),
|
"details": details,
|
||||||
})
|
})
|
||||||
nr += 1
|
nr += 1
|
||||||
|
|
||||||
@@ -327,7 +385,7 @@ def process_blocks(blocks, lookup):
|
|||||||
"anzahl": counters["anzahl_eckraeder"],
|
"anzahl": counters["anzahl_eckraeder"],
|
||||||
"laenge_mm": "",
|
"laenge_mm": "",
|
||||||
"hoehe_m": "",
|
"hoehe_m": "",
|
||||||
"details": {},
|
"details": {"IDs": eckrad_ids},
|
||||||
})
|
})
|
||||||
nr += 1
|
nr += 1
|
||||||
|
|
||||||
@@ -342,7 +400,7 @@ def process_blocks(blocks, lookup):
|
|||||||
"anzahl": counters["anzahl_variofoerderer"],
|
"anzahl": counters["anzahl_variofoerderer"],
|
||||||
"laenge_mm": "",
|
"laenge_mm": "",
|
||||||
"hoehe_m": "",
|
"hoehe_m": "",
|
||||||
"details": {},
|
"details": {"IDs": strecke_ids},
|
||||||
})
|
})
|
||||||
nr += 1
|
nr += 1
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user