import os from qgis.core import ( QgsVectorLayer, QgsProject, QgsFeature, QgsField, QgsFeatureRequest, QgsGeometry ) from qgis.PyQt.QtWidgets import QMessageBox from qgis.PyQt.QtCore import QVariant from sn_basis import get_variable alkis_NAS_url = "https://geodienste.sachsen.de/aaa/public_alkis/nas/wfs" typename = "adv:AX_BauRaumOderBodenordnungsrecht" def alkis_verfahrensgebiet(tab_widget): verfahrensnummer = get_variable("verfahrensnummer") if not verfahrensnummer: QMessageBox.critical(tab_widget, "Fehler", "Die Projektvariable 'sn_verfahrensnummer' ist nicht gesetzt.") tab_widget.setze_haken(tab_widget.haken1, False) return None, False project = QgsProject.instance() existing_layers = project.mapLayersByName("Verfahrensgebiet") if existing_layers: reply = QMessageBox.question( tab_widget, "Layer bereits vorhanden", "Der Layer 'Verfahrensgebiet' existiert bereits.\n" "Möchten Sie ihn löschen und neu laden?", QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No, QMessageBox.StandardButton.No ) if reply == QMessageBox.StandardButton.Yes: for lyr in existing_layers: project.removeMapLayer(lyr.id()) else: # Vorhandenen Layer zurückgeben, kein Neu-Laden return existing_layers[0], False # WFS mit Filter laden wfs_uri_find = ( f"url='{alkis_NAS_url}' typename='{typename}' srsname='EPSG:25833' " f"sql=SELECT * FROM AX_BauRaumOderBodenordnungsrecht " f"WHERE bezeichnung LIKE '{verfahrensnummer}%'" ) temp_layer = QgsVectorLayer(wfs_uri_find, "TempVerfahrensgebiet", "WFS") if not temp_layer.isValid(): QMessageBox.critical(tab_widget, "Fehler", "Layer konnte nicht geladen werden.") return None, False features = list(temp_layer.getFeatures()) if not features: QMessageBox.critical(tab_widget, "Fehler", f"Verfahrenskennzeichen {verfahrensnummer} nicht im WFS gefunden.") return None, False # Geometrie bestimmen if len(features) == 1: union_geom = features[0].geometry() else: geoms = [f.geometry() for f in features] union_geom = QgsGeometry.unaryUnion(geoms) if union_geom is None or union_geom.isEmpty(): QMessageBox.critical(tab_widget, "Fehler", "Keine Geometrien zum Verschmelzen gefunden.") return None, False # Memory-Layer mit festem Namen "Verfahrensgebiet" crs = temp_layer.crs().authid() memory_layer = QgsVectorLayer(f"Polygon?crs={crs}", "Verfahrensgebiet", "memory") pr = memory_layer.dataProvider() # Feld "VKZ" hinzufügen pr.addAttributes([QgsField("VKZ", QVariant.String)]) memory_layer.updateFields() # Feature mit Geometrie erstellen feat_union = QgsFeature() feat_union.setGeometry(union_geom) feat_union.setAttributes([verfahrensnummer]) pr.addFeatures([feat_union]) memory_layer.updateExtents() return memory_layer, True