OGC API Features: alle Layer (Vorerhebung bis Massnahmenblatt) als editierbare OAPIF-Layer

Seit dem 07.09.2026 bietet die API OGC API Features (Part 1/2/3/4) unter /v2/ogc. Neu:
- vln_karten/ogc_layers.py: Auth-Konfiguration "APIHeader" (X-API-Key aus dem Login,
  kein Passwort in QGIS), GET /ogc/collections?vkz=, je Sammlung ein QgsVectorLayer(...,
  "OAPIF") in Gruppen (Vorerhebung / Massnahmenblaetter / Verfahren); Speicher-CRS je
  Sammlung (EPSG:25833 bzw. CRS84).
- plugin.py: Toolbar-Aktion "Alle Layer (OGC API) laden" (run_load_ogc).
- README: Weg ohne Plugin (Datenquellenverwaltung, Basic oder API-Header), Sammlungs-IDs,
  Schreibregeln (in place, Vorerhebung nur "bearbeitung", Massnahmenblatt blatt_*),
  Routenuebersicht; klassischer GeoJSON-Weg bleibt als zweiter Abschnitt.
- metadata: 0.2.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Erik
2026-09-07 09:47:55 +02:00
co-authored by Claude Opus 4.8
parent 2eff228217
commit 4c52c464dd
4 changed files with 281 additions and 4 deletions
+40
View File
@@ -27,6 +27,7 @@ from .layer_manager import (
plugin_layers,
)
from .login_dialog import LoginDialog, SETTINGS_GROUP
from . import ogc_layers
MENU_TITLE = "&VLN Karten"
@@ -102,6 +103,11 @@ class VlnKartenPlugin:
self.dataset_actions.append(
self._add_action("Aktiven Layer hochladen", self.run_upload_active_layer)
)
# OGC API Features (seit 07.09.2026): alle Sammlungen des Verfahrens als native,
# editierbare OAPIF-Layer — QGIS schreibt jede Änderung selbst zurück (Part 4).
self.dataset_actions.append(
self._add_action("Alle Layer (OGC API) laden", self.run_load_ogc)
)
self.iface.projectRead.connect(self.restore_project_selection)
self.iface.newProjectCreated.connect(self.restore_project_selection)
@@ -402,6 +408,40 @@ class VlnKartenPlugin:
duration=5,
)
def run_load_ogc(self):
"""Alle Sammlungen des gewählten Verfahrens (Verfahrens-Layer, Vorerhebung,
Maßnahmenblätter) als OAPIF-Layer laden — editierbar in QGIS, Rückschreiben je Feature."""
if not self._ensure_logged_in():
return
vkz = self._current_vkz()
if not vkz:
self._show_error("Kein Verfahren", "Bitte zuerst ein Verfahren auswählen.")
return
authcfg = ogc_layers.authcfg_sicherstellen(self.client.api_key, SETTINGS_GROUP)
if not authcfg:
self.iface.messageBar().pushMessage(
"VLN Karten",
"Keine QGIS-Authentifizierungskonfiguration angelegt — QGIS fragt beim ersten "
"Zugriff nach Anmeldename und Passwort (HTTP Basic, Manager-Login).",
level=Qgis.Warning, duration=8)
try:
collections = ogc_layers.collections_laden(self.client, vkz)
except AuthError:
self._handle_session_expired()
return
except ApiError as exc:
self._show_error("OGC API", str(exc))
return
if not collections:
self._show_error("OGC API", "Für dieses Verfahren gibt es keine Sammlungen "
"(oder keine Berechtigung).")
return
geladen, fehler = ogc_layers.layer_hinzufuegen(
self.iface, self.client.base_url, vkz, self.combo.currentText(), collections, authcfg)
if fehler:
self._show_error("OGC API — nicht geladen",
"\n".join("%s: %s" % f for f in fehler))
# ------------------------------------------------------------------
# Hilfsfunktionen
# ------------------------------------------------------------------