Statisitik Umringsgrenzpunkte ergänzt
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user