Button und Funktion "Flurstücke aus Gemarkungen laden" ergänzt

This commit is contained in:
2026-06-23 13:30:11 +02:00
parent d0d0523417
commit f36418b814
+110 -1
View File
@@ -14,12 +14,13 @@ from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
from qgis.utils import iface
from sn_verfahrensgebiet.functions.verfahrensgebiet_alkis import LoadStatus
from sn_verfahrensgebiet.functions.flurstueck_alkis import flurstueck_alkis
from sn_verfahrensgebiet.functions.flurstueck_alkis import flurstueck_alkis, ALKIS_SF_URL
from sn_verfahrensgebiet.functions.verfahrensgebiet_alkis_komplett import verfahrensgebiet_alkis_komplett
from sn_verfahrensgebiet.functions.grenzpunkt_alkis import grenzpunkte_gemarkungsweise, JOINED_LAYER_NAME
from sn_verfahrensgebiet.functions.gemarkung_alkis import (
gemarkung_schluessel_und_namen_von_vg_geometrie,
lade_gemarkungen_layer,
ALKIS_VEREINF_URL,
)
from sn_verfahrensgebiet.functions.umringstatistik_grenzpunkte import umringstatistik_grenzpunkte
from sn_verfahrensgebiet.functions.verfahrensgebiet_edit_service import (
@@ -108,6 +109,11 @@ class WorkingTab(QWidget):
row_flurst_buttons.addWidget(self.btn_flurst_shape)
layout.addLayout(row_flurst_buttons)
row_flurst_gem_buttons = QHBoxLayout()
self.btn_flurst_aus_gemarkungen = QPushButton("aus gewählten Gemarkungen laden")
row_flurst_gem_buttons.addWidget(self.btn_flurst_aus_gemarkungen)
layout.addLayout(row_flurst_gem_buttons)
# Abschnitt 2c: Grenzpunkte
row_grenz_header = QHBoxLayout()
lbl_grenz = QLabel("<b>Grenzpunkte</b>")
@@ -150,6 +156,7 @@ class WorkingTab(QWidget):
# Signale verbinden
self.btn_verf_alkis.clicked.connect(self.handle_verf_alkis)
self.btn_flurst_alkis.clicked.connect(self.handle_flurst_alkis)
self.btn_flurst_aus_gemarkungen.clicked.connect(self.handle_flurst_aus_gemarkungen)
self.btn_gem_alkis.clicked.connect(self.handle_gem_alkis)
self.btn_grenz_alkis.clicked.connect(self.handle_grenz_alkis)
self.btn_umring_statistik.clicked.connect(self.handle_umringstatistik)
@@ -289,6 +296,108 @@ class WorkingTab(QWidget):
finally:
self._set_busy(self.btn_flurst_alkis, False, "Aus ALKIS laden")
def handle_flurst_aus_gemarkungen(self) -> None:
"""Lädt Flurstücke aus ALKIS anhand der Auswahl im Layer 'Gemarkungen'.
- Kein Layer 'Gemarkungen': Layer wird geladen, Nutzer aufgefordert Auswahl zu treffen.
- Keine Auswahl: Warnmeldung.
- Auswahl vorhanden: Gemarkungsschlüssel extrahieren und Flurstücke direkt laden.
"""
self._set_busy(self.btn_flurst_aus_gemarkungen, True, "aus gewählten Gemarkungen laden")
try:
project = QgsProject.instance()
# Fall A: Layer 'Gemarkungen' nicht vorhanden → laden
gem_layers = project.mapLayersByName("Gemarkungen")
if not gem_layers:
gem_layer = lade_gemarkungen_layer()
if not gem_layer:
error(
"Gemarkungen",
f"Gemarkungslayer konnte nicht geladen werden – "
f"Dienst nicht erreichbar ({ALKIS_VEREINF_URL}). "
f"Bitte Netzwerkverbindung prüfen.",
duration=0,
)
return
project.addMapLayer(gem_layer)
apply_style(gem_layer, "gemarkungen_beschriftet.qml")
self.setze_haken(self.haken_gem, True)
QMessageBox.information(
self,
"Gemarkungen",
"Gemarkungslayer wurde geladen – bitte Gemarkungen auswählen.",
)
return
gemarkungen_layer = gem_layers[0]
# Fall B: Keine Auswahl
if not gemarkungen_layer.selectedFeatureCount():
QMessageBox.warning(
self,
"Gemarkungen",
"Bitte mindestens eine Gemarkung im Layer Gemarkungen auswählen.",
)
return
# Fall C: Auswahl vorhanden → Schlüssel extrahieren
vorgabe_schluessel = []
vorgabe_namen = []
for feat in gemarkungen_layer.selectedFeatures():
try:
schluessel = str(feat["schluessel"]).strip()
nummer = schluessel[-4:] if len(schluessel) >= 4 else schluessel
except Exception:
nummer = ""
try:
name = str(feat["ave_name"]).strip()
except Exception:
name = ""
if nummer:
vorgabe_schluessel.append(nummer)
vorgabe_namen.append(name)
if not vorgabe_schluessel:
error(
"Flurstücke",
"Aus der Gemarkungsauswahl konnten keine gültigen Gemarkungsschlüssel extrahiert werden.",
duration=8,
)
return
# Flurstücke direkt laden (kein Dialog)
layer, status = flurstueck_alkis(
self,
vorgabe_schluessel=vorgabe_schluessel,
vorgabe_namen=vorgabe_namen,
ohne_dialog=True,
)
if not layer or not layer.isValid():
error(
"Flurstücke",
f"Flurstücke konnten nicht geladen werden – WFS-Dienst ({ALKIS_SF_URL}) "
f"nicht erreichbar oder keine Features für die gewählten Gemarkungen.",
duration=0,
)
return
if status in (LoadStatus.FIRST, LoadStatus.RELOAD):
project.addMapLayer(layer)
apply_style(layer, "GIS_Flst_Beschriftung_ALKIS_NAS.qml")
iface.mapCanvas().refresh()
self.setze_haken(self.haken_flurst, True)
msg = "erstmalig geladen" if status == LoadStatus.FIRST else "neu geladen"
success("Flurstücke", f"Layer wurde {msg}.", duration=5)
elif status == LoadStatus.KEEP:
self.setze_haken(self.haken_flurst, True)
info("Flurstücke", "Vorhandener Layer wurde behalten.", duration=4)
finally:
self._set_busy(self.btn_flurst_aus_gemarkungen, False, "aus gewählten Gemarkungen laden")
# ------------------------------------------------------------------
# Gemarkungen-Handler
# ------------------------------------------------------------------