Statisitik Umringsgrenzpunkte ergänzt

This commit is contained in:
2026-05-05 21:17:19 +02:00
parent 5e3261a8de
commit a829716810
3 changed files with 443 additions and 4 deletions
+24 -3
View File
@@ -227,6 +227,7 @@ def _parse_alkis_gml_memory_layer(
feature_local_name: str,
layer_name: str,
geom_prop: Optional[str] = "position",
extract_qualitaet: bool = False,
) -> Optional[object]:
"""Parst ALKIS-GML-Bytes und erstellt einen QGIS Memory-Layer.
@@ -243,6 +244,11 @@ def _parse_alkis_gml_memory_layer(
Anzeigename des resultierenden Memory-Layers.
geom_prop :
Lokaler Name des Geometrie-Attributs (``None`` = kein Geometrie-Layer).
extract_qualitaet :
Wenn ``True``, wird das verschachtelte Attribut
``qualitaetsangaben_ax_dqpunktort_genauigkeitsstufe`` aus
``adv:qualitaetsangaben/adv:genauigkeitsstufe`` extrahiert.
Nur für ``AX_PunktortTA`` sinnvoll.
Returns
-------
@@ -271,12 +277,18 @@ def _parse_alkis_gml_memory_layer(
# Felder aus ALLEN Features ermitteln (2-Pass), damit optionale Felder
# wie "istTeilVon" nicht verloren gehen, wenn sie im ersten Feature fehlen.
_QUALITAET_CONTAINER = "qualitaetsangaben"
_QUALITAET_FELD = "qualitaetsangaben_ax_dqpunktort_genauigkeitsstufe"
feld_namen: List[str] = ["gml_id"]
for feat_el in feat_elems:
for child in feat_el:
local = child.tag.split("}")[-1] if "}" in child.tag else child.tag
if extract_qualitaet and local == _QUALITAET_CONTAINER:
continue # Container wird durch verschachteltes Einzelfeld ersetzt
if local not in feld_namen and local != geom_prop:
feld_namen.append(local)
if extract_qualitaet and _QUALITAET_FELD not in feld_namen:
feld_namen.append(_QUALITAET_FELD)
# Memory-Layer anlegen
mem_uri = f"Point?crs=EPSG:25833" if geom_prop else "none"
@@ -312,6 +324,15 @@ def _parse_alkis_gml_memory_layer(
for child in feat_elem:
local = child.tag.split("}")[-1] if "}" in child.tag else child.tag
if extract_qualitaet and local == _QUALITAET_CONTAINER:
# Verschachtelten Genauigkeitswert extrahieren
qual_el = child.find(f".//{{{_ADV}}}genauigkeitsstufe")
if qual_el is not None and qual_el.text:
try:
qgs_feat[_QUALITAET_FELD] = qual_el.text.strip()
except Exception:
pass
continue
if local == geom_prop or local not in feld_namen:
continue
href = child.get(f"{{{_XLINK}}}href", "")
@@ -781,7 +802,7 @@ def _lade_punktort_ta_batches_per_gemarkung(
duration=4,
)
continue
tmp = _parse_alkis_gml_memory_layer(_gml_bytes, "AX_PunktortTA", "_TmpPTA", geom_prop="position")
tmp = _parse_alkis_gml_memory_layer(_gml_bytes, "AX_PunktortTA", "_TmpPTA", geom_prop="position", extract_qualitaet=True)
if not tmp:
warning(
"Grenzpunkte (Diagnose)",
@@ -1010,7 +1031,7 @@ def lade_punktort_ta(
continue
tmp = _parse_alkis_gml_memory_layer(
_gml_bytes, "AX_PunktortTA", "_TmpPTA", geom_prop="position"
_gml_bytes, "AX_PunktortTA", "_TmpPTA", geom_prop="position", extract_qualitaet=True
)
if not tmp:
continue
@@ -1401,7 +1422,7 @@ def grenzpunkte_gemarkungsweise(
continue
tmp = _parse_alkis_gml_memory_layer(
_gml_bytes, "AX_PunktortTA", "_TmpPTA", geom_prop="position"
_gml_bytes, "AX_PunktortTA", "_TmpPTA", geom_prop="position", extract_qualitaet=True
)
if not tmp:
continue