anhängen-Funktion für Flurstücke
This commit is contained in:
@@ -53,23 +53,28 @@ def _check_existing_flurstueck_layer(tab_widget):
|
||||
if not existing_layers:
|
||||
return None, LoadStatus.FIRST
|
||||
|
||||
reply = QMessageBox.question(
|
||||
tab_widget,
|
||||
"Layer bereits vorhanden",
|
||||
f"Der Layer '{FLST_LAYER_NAME}' existiert bereits.\n"
|
||||
"Möchten Sie ihn löschen und neu laden?",
|
||||
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
|
||||
QMessageBox.StandardButton.No,
|
||||
msg = QMessageBox(tab_widget)
|
||||
msg.setWindowTitle("Layer bereits vorhanden")
|
||||
msg.setText(
|
||||
f"Der Layer '{FLST_LAYER_NAME}' existiert bereits.\nWas soll geschehen?"
|
||||
)
|
||||
if reply == QMessageBox.StandardButton.Yes:
|
||||
btn_ueberschreiben = msg.addButton("Überschreiben", QMessageBox.ButtonRole.DestructiveRole)
|
||||
btn_anhaengen = msg.addButton("Anhängen", QMessageBox.ButtonRole.AcceptRole)
|
||||
btn_abbrechen = msg.addButton("Abbrechen", QMessageBox.ButtonRole.RejectRole)
|
||||
msg.setDefaultButton(btn_abbrechen)
|
||||
msg.exec()
|
||||
clicked = msg.clickedButton()
|
||||
if clicked is btn_ueberschreiben:
|
||||
for lyr in existing_layers:
|
||||
project.removeMapLayer(lyr.id())
|
||||
return None, LoadStatus.RELOAD
|
||||
elif clicked is btn_anhaengen:
|
||||
return existing_layers[0], LoadStatus.APPEND
|
||||
else:
|
||||
return existing_layers[0], LoadStatus.KEEP
|
||||
return None, LoadStatus.NONE
|
||||
|
||||
|
||||
def _lade_flurstuecke_per_gemarkung(schluessel_liste: List[str]):
|
||||
def lade_flurstuecke_per_gemarkung(schluessel_liste: List[str]):
|
||||
"""Lädt Flurstücke für mehrere Gemarkungen, eine WFS-Anfrage pro Schlüssel.
|
||||
|
||||
Vermeidet das WFS-Feature-Limit einer einzelnen Abfrage mit mehreren
|
||||
@@ -179,6 +184,7 @@ def flurstueck_alkis(
|
||||
Bei Fehlern ist der Layer ``None`` und der Status :attr:`LoadStatus.NONE`.
|
||||
"""
|
||||
# --- Schritt 1: Vorhandenen Layer behandeln ----------------------------
|
||||
append_target = None
|
||||
if ohne_dialog:
|
||||
project = QgsProject.instance()
|
||||
hatte_layer = bool(project.mapLayersByName(FLST_LAYER_NAME))
|
||||
@@ -189,6 +195,10 @@ def flurstueck_alkis(
|
||||
existing, status = _check_existing_flurstueck_layer(tab_widget)
|
||||
if status == LoadStatus.KEEP:
|
||||
return existing, status
|
||||
if status == LoadStatus.NONE:
|
||||
return None, LoadStatus.NONE
|
||||
if status == LoadStatus.APPEND:
|
||||
append_target = existing
|
||||
|
||||
# --- Schritt 2: Gemarkungsschlüssel bestimmen -------------------------
|
||||
if ohne_dialog:
|
||||
@@ -226,7 +236,7 @@ def flurstueck_alkis(
|
||||
return None, LoadStatus.NONE
|
||||
|
||||
# --- Schritt 3: Flurstücke gemarkungsweise laden ----------------------
|
||||
layer = _lade_flurstuecke_per_gemarkung(schluessel_liste)
|
||||
layer = lade_flurstuecke_per_gemarkung(schluessel_liste)
|
||||
|
||||
if not layer or not layer.isValid() or layer.featureCount() == 0:
|
||||
if not ohne_dialog:
|
||||
@@ -238,4 +248,10 @@ def flurstueck_alkis(
|
||||
)
|
||||
return None, LoadStatus.NONE
|
||||
|
||||
# --- Anhängen an vorhandenen Layer ------------------------------------
|
||||
if status == LoadStatus.APPEND and append_target is not None:
|
||||
append_target.dataProvider().addFeatures(list(layer.getFeatures()))
|
||||
append_target.updateExtents()
|
||||
return append_target, LoadStatus.APPEND
|
||||
|
||||
return layer, status
|
||||
|
||||
Reference in New Issue
Block a user