Doppeltes Laden von Flurstuecken beim Anhaengen verhindert (#28)
Beim Anhaengen an einen bestehenden Flurstueck-Layer wurden alle neu geladenen Objekte unabhaengig davon hinzugefuegt, ob sie ueber flurstueckskennzeichen bereits im Layer vorhanden waren. Jetzt werden nur noch neue Kennzeichen angehaengt; fehlt das Feld, bleibt das bisherige Verhalten als Rueckfall erhalten. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -37,6 +37,7 @@ from sn_verfahrensgebiet.functions.verfahrensgebiet_alkis import LoadStatus
|
||||
ALKIS_SF_URL = "https://geodienste.sachsen.de/aaa/public_alkis/sf/wfs"
|
||||
FLST_TYPENAME = "adv:AX_Flurstueck"
|
||||
FLST_LAYER_NAME = "Flurstücke"
|
||||
FELD_FLURSTUECKSKENNZEICHEN = "flurstueckskennzeichen"
|
||||
|
||||
|
||||
def _check_existing_flurstueck_layer(tab_widget):
|
||||
@@ -74,6 +75,24 @@ def _check_existing_flurstueck_layer(tab_widget):
|
||||
return None, LoadStatus.NONE
|
||||
|
||||
|
||||
def _vorhandene_kennzeichen(layer) -> set:
|
||||
"""Liefert die ``flurstueckskennzeichen``-Werte, die ``layer`` bereits enthält.
|
||||
|
||||
Fehlt das Feld, wird eine leere Menge zurückgegeben (kein Abgleich möglich).
|
||||
"""
|
||||
kennzeichen: set = set()
|
||||
if layer.fields().indexFromName(FELD_FLURSTUECKSKENNZEICHEN) < 0:
|
||||
return kennzeichen
|
||||
for feat in layer.getFeatures():
|
||||
try:
|
||||
kz = str(feat[FELD_FLURSTUECKSKENNZEICHEN] or "").strip()
|
||||
except Exception:
|
||||
kz = ""
|
||||
if kz:
|
||||
kennzeichen.add(kz)
|
||||
return kennzeichen
|
||||
|
||||
|
||||
def lade_flurstuecke_per_gemarkung(schluessel_liste: List[str]):
|
||||
"""Lädt Flurstücke für mehrere Gemarkungen, eine WFS-Anfrage pro Schlüssel.
|
||||
|
||||
@@ -250,7 +269,22 @@ def flurstueck_alkis(
|
||||
|
||||
# --- Anhängen an vorhandenen Layer ------------------------------------
|
||||
if status == LoadStatus.APPEND and append_target is not None:
|
||||
append_target.dataProvider().addFeatures(list(layer.getFeatures()))
|
||||
alle_feats = list(layer.getFeatures())
|
||||
neue_feats = alle_feats
|
||||
if layer.fields().indexFromName(FELD_FLURSTUECKSKENNZEICHEN) >= 0:
|
||||
vorhandene = _vorhandene_kennzeichen(append_target)
|
||||
neue_feats = [
|
||||
f for f in alle_feats
|
||||
if str(f[FELD_FLURSTUECKSKENNZEICHEN] or "").strip() not in vorhandene
|
||||
]
|
||||
uebersprungen = len(alle_feats) - len(neue_feats)
|
||||
if uebersprungen:
|
||||
_info(
|
||||
"Flurstücke",
|
||||
f"{uebersprungen} bereits vorhandene Flurstücke übersprungen.",
|
||||
duration=3,
|
||||
)
|
||||
append_target.dataProvider().addFeatures(neue_feats)
|
||||
append_target.updateExtents()
|
||||
append_target.triggerRepaint()
|
||||
return append_target, LoadStatus.APPEND
|
||||
|
||||
Reference in New Issue
Block a user