Button und Funktion "Flurstücke aus Gemarkungen laden" ergänzt
This commit is contained in:
+110
-1
@@ -14,12 +14,13 @@ from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
|
|||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
|
|
||||||
from sn_verfahrensgebiet.functions.verfahrensgebiet_alkis import LoadStatus
|
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.verfahrensgebiet_alkis_komplett import verfahrensgebiet_alkis_komplett
|
||||||
from sn_verfahrensgebiet.functions.grenzpunkt_alkis import grenzpunkte_gemarkungsweise, JOINED_LAYER_NAME
|
from sn_verfahrensgebiet.functions.grenzpunkt_alkis import grenzpunkte_gemarkungsweise, JOINED_LAYER_NAME
|
||||||
from sn_verfahrensgebiet.functions.gemarkung_alkis import (
|
from sn_verfahrensgebiet.functions.gemarkung_alkis import (
|
||||||
gemarkung_schluessel_und_namen_von_vg_geometrie,
|
gemarkung_schluessel_und_namen_von_vg_geometrie,
|
||||||
lade_gemarkungen_layer,
|
lade_gemarkungen_layer,
|
||||||
|
ALKIS_VEREINF_URL,
|
||||||
)
|
)
|
||||||
from sn_verfahrensgebiet.functions.umringstatistik_grenzpunkte import umringstatistik_grenzpunkte
|
from sn_verfahrensgebiet.functions.umringstatistik_grenzpunkte import umringstatistik_grenzpunkte
|
||||||
from sn_verfahrensgebiet.functions.verfahrensgebiet_edit_service import (
|
from sn_verfahrensgebiet.functions.verfahrensgebiet_edit_service import (
|
||||||
@@ -108,6 +109,11 @@ class WorkingTab(QWidget):
|
|||||||
row_flurst_buttons.addWidget(self.btn_flurst_shape)
|
row_flurst_buttons.addWidget(self.btn_flurst_shape)
|
||||||
layout.addLayout(row_flurst_buttons)
|
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
|
# Abschnitt 2c: Grenzpunkte
|
||||||
row_grenz_header = QHBoxLayout()
|
row_grenz_header = QHBoxLayout()
|
||||||
lbl_grenz = QLabel("<b>Grenzpunkte</b>")
|
lbl_grenz = QLabel("<b>Grenzpunkte</b>")
|
||||||
@@ -150,6 +156,7 @@ class WorkingTab(QWidget):
|
|||||||
# Signale verbinden
|
# Signale verbinden
|
||||||
self.btn_verf_alkis.clicked.connect(self.handle_verf_alkis)
|
self.btn_verf_alkis.clicked.connect(self.handle_verf_alkis)
|
||||||
self.btn_flurst_alkis.clicked.connect(self.handle_flurst_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_gem_alkis.clicked.connect(self.handle_gem_alkis)
|
||||||
self.btn_grenz_alkis.clicked.connect(self.handle_grenz_alkis)
|
self.btn_grenz_alkis.clicked.connect(self.handle_grenz_alkis)
|
||||||
self.btn_umring_statistik.clicked.connect(self.handle_umringstatistik)
|
self.btn_umring_statistik.clicked.connect(self.handle_umringstatistik)
|
||||||
@@ -289,6 +296,108 @@ class WorkingTab(QWidget):
|
|||||||
finally:
|
finally:
|
||||||
self._set_busy(self.btn_flurst_alkis, False, "Aus ALKIS laden")
|
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
|
# Gemarkungen-Handler
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user