grenzpunktemit 200m puffer um verfahrensgebiet laden

This commit is contained in:
2026-05-01 23:32:28 +02:00
parent 821ea4ec2b
commit 00ee470e08
2 changed files with 1265 additions and 70 deletions
+57 -31
View File
@@ -16,9 +16,8 @@ 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.verfahrensgebiet_alkis_komplett import verfahrensgebiet_alkis_komplett
# TODO Grenzpunkt-Pipeline: Import reaktivieren, sobald grenzpunkt_alkis.py
# mit der neuen Pipeline (PunktortTA → istTeilVon → Einzel-URN) umgeschrieben wurde.
# from sn_verfahrensgebiet.functions.grenzpunkt_alkis import grenzpunkt_alkis
from sn_verfahrensgebiet.functions.grenzpunkt_alkis import grenzpunkte_gemarkungsweise
from sn_verfahrensgebiet.functions.gemarkung_alkis import gemarkung_schluessel_und_namen_von_vg_geometrie
from sn_verfahrensgebiet.functions.verfahrensgebiet_edit_service import (
pruefe_flurstueck_layer,
pruefe_auswahl,
@@ -405,36 +404,63 @@ class WorkingTab(QWidget):
# ------------------------------------------------------------------
def handle_grenz_alkis(self) -> None:
"""Lädt Grenzpunkte (AX_PunktortTA + AX_Grenzpunkt) aus ALKIS.
"""Lädt Grenzpunkte gemarkungsweise aus ALKIS.
TODO Grenzpunkt-Pipeline: Implementierung ausstehend.
Neue Pipeline: VG-Geometrie → PunktortTA (spatial filter) →
istTeilVon-Attribute → Grenzpunkt per Einzel-URN laden.
Bis dahin ist dieser Handler deaktiviert.
Verwendet denselben Gemarkungsfilter wie "Verfahrensgebiet aus ALKIS laden":
Die Gemarkungsschlüssel werden per Spatial-Join aus der Geometrie des
aktuell gewählten Verfahrensgebiet-Layers abgeleitet.
"""
# TODO Grenzpunkt-Pipeline: Körper reaktivieren, sobald grenzpunkt_alkis.py
# mit der neuen Pipeline umgeschrieben wurde.
#
# self._set_busy(self.btn_grenz_alkis, True, "Grenzpunkte aus ALKIS laden")
# try:
# punktort_layer, grenzpunkt_layer = grenzpunkt_alkis(self)
#
# if grenzpunkt_layer and grenzpunkt_layer.isValid():
# iface.mapCanvas().refresh()
# self.setze_haken(self.haken_grenz, True)
# success("Grenzpunkte", "Grenzpunkte erfolgreich geladen.", duration=5)
# elif punktort_layer and punktort_layer.isValid():
# iface.mapCanvas().refresh()
# self.setze_haken(self.haken_grenz, True)
# info(
# "Grenzpunkte",
# "PunktortTA-Layer geladen. Grenzpunkt-IDs konnten nicht aufgelöst werden.",
# duration=6,
# )
# finally:
# self._set_busy(self.btn_grenz_alkis, False, "Grenzpunkte aus ALKIS laden")
from sn_basis.functions.message_wrapper import warning as _warn
_warn("Grenzpunkte", "Grenzpunkt-Pipeline ist noch nicht implementiert.", duration=5)
# Verfahrensgebiet-Layer aus dem Dropdown holen
vg_layer = self.verf_layer_combo.currentLayer()
if not vg_layer or not vg_layer.isValid():
warning(
"Grenzpunkte",
"Kein Verfahrensgebiet-Layer gewählt. Bitte zuerst ein Verfahrensgebiet laden.",
duration=6,
)
return
# Geometrie des ersten Features als Suchgeometrie
feats = list(vg_layer.getFeatures())
if not feats:
warning("Grenzpunkte", "Verfahrensgebiet-Layer enthält keine Features.", duration=5)
return
# Geometrie über alle Features vereinen
from qgis.core import QgsGeometry # type: ignore[import]
vg_geom = QgsGeometry.unaryUnion([f.geometry() for f in feats if f.hasGeometry()])
if not vg_geom or vg_geom.isEmpty():
warning("Grenzpunkte", "Verfahrensgebiet-Layer hat keine Geometrie.", duration=5)
return
# Gemarkungsschlüssel per Spatial-Join ermitteln (identisch zu VG-Workflow)
schluessel_namen = gemarkung_schluessel_und_namen_von_vg_geometrie(vg_geom)
schluessel_liste = [nr for nr, _ in schluessel_namen]
if not schluessel_liste:
warning(
"Grenzpunkte",
"Keine Gemarkungen für das Verfahrensgebiet gefunden. "
"Bitte Netzwerkverbindung prüfen.",
duration=6,
)
return
self._set_busy(self.btn_grenz_alkis, True, "Grenzpunkte aus ALKIS laden")
try:
joined_layer = grenzpunkte_gemarkungsweise(self, schluessel_liste, vg_geom=vg_geom)
if joined_layer and joined_layer.isValid():
iface.mapCanvas().refresh()
self.setze_haken(self.haken_grenz, True)
success(
"Grenzpunkte",
f"Grenzpunkte erfolgreich geladen ({joined_layer.featureCount()} Objekte).",
duration=5,
)
finally:
self._set_busy(self.btn_grenz_alkis, False, "Grenzpunkte aus ALKIS laden")
# ---------------------------------------------------------------------------