Geodienste aus der Linkliste laden — je Verfahren, aus der Seitenleiste
Erik, 11.09.2026: "als angemeldeter Nutzer TG-spezifisch die Dienste aus der Linkliste einbinden". - vln_karten/linkliste.py (neu): holt GET /v2/linkliste?vkz=…, baut je Anbieter den passenden Layer (wms, wfs, rest/ArcGIS, geojson/ogr), wendet den beim Eintrag hinterlegten QML-Stil an und haengt alles schrittweise in die Gruppe "Geodienste <VKZ> <Name>" mit Untergruppen je Listengruppe. - Seitenleiste: neuer Block "Geodienste (Linkliste)" mit Liste holen, Haken je Dienst (Name, Gruppe, Herkunft, Stil-Hinweis), alle an/aus und Ausgewaehlte laden. - Die Liste kommt fertig aufgeloest vom Server; das Plugin rechnet nichts nach. Zwei Dinge, die der Test gezeigt hat (tools/headless_dienste_test.py, QGIS 4.2 ohne Fenster gegen die Live-Schnittstelle): * Die Adressform muss schlicht "url=<Adresse>" sein, wie in Plugin_SN_Basis/modules/LayerLoader.py. Mit einem selbst gebauten QgsDataSourceUri (crs, format) kam der ArcGIS-Layer erst nach 60 s und ungueltig zurueck; jetzt 0,4 s und 4457 Objekte. * Ein 404 auf style.qml erreicht QgsBlockingNetworkRequest als Transportfehler. Erst den Statuscode ansehen, sonst meldet das Plugin einen Fehler, wo schlicht kein Stil hinterlegt ist. Testlauf 11.09.2026: 44 Dienste in 0,8 s, Layer gueltig, Stil angewendet, "kein Stil hinterlegt" sauber gemeldet — 0 Fehler. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -19,6 +19,7 @@ from qgis.core import Qgis, QgsDataSourceUri, QgsProject
|
||||
from .api_client import ApiError, AuthError, KartenApiClient
|
||||
from .panel import VlnPanel
|
||||
from .login_dialog import LoginDialog, SETTINGS_GROUP
|
||||
from . import linkliste
|
||||
from . import ogc_layers
|
||||
|
||||
MENU_TITLE = "&VLN Karten"
|
||||
@@ -50,6 +51,8 @@ class VlnKartenPlugin:
|
||||
"verfahren_gewaehlt": self.on_verfahren_changed,
|
||||
"load_ogc": self.run_load_ogc,
|
||||
"save_edits": self.run_save_edits,
|
||||
"dienste_holen": self.run_dienste_holen,
|
||||
"dienste_laden": self.run_dienste_laden,
|
||||
"save_style": self.run_save_style,
|
||||
},
|
||||
)
|
||||
@@ -288,6 +291,56 @@ class VlnKartenPlugin:
|
||||
if self.panel is not None:
|
||||
self.panel.set_status("%d von %d Layern gespeichert." % (len(gespeichert), len(offen)))
|
||||
|
||||
def run_dienste_holen(self):
|
||||
"""Die Linkliste des gewählten Verfahrens holen und in der Seitenleiste anzeigen.
|
||||
|
||||
Der Server liefert sie bereits aufgelöst: landesweit, Landkreis, Team und Verfahren
|
||||
sind zusammengeführt, geerbte Einträge tragen ihre Herkunft. Das Plugin rechnet nichts
|
||||
nach, es zeigt und lädt.
|
||||
"""
|
||||
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
|
||||
try:
|
||||
dienste = linkliste.dienste_laden(self.client, vkz)
|
||||
except AuthError:
|
||||
self._handle_session_expired()
|
||||
return
|
||||
except ApiError as exc:
|
||||
self._show_error("Linkliste", str(exc))
|
||||
return
|
||||
self.panel.set_dienste(dienste)
|
||||
herkunft = {}
|
||||
for d in dienste:
|
||||
herkunft[d.get("herkunft_text") or "?"] = herkunft.get(d.get("herkunft_text") or "?", 0) + 1
|
||||
text = ", ".join("%d %s" % (n, k) for k, n in herkunft.items()) or "nichts hinterlegt"
|
||||
self.panel.set_status("%d Geodienste: %s" % (len(dienste), text))
|
||||
self.iface.messageBar().pushMessage(
|
||||
"VLN Karten", "%d Geodienste für dieses Verfahren (%s)." % (len(dienste), text),
|
||||
level=Qgis.Info, duration=6)
|
||||
|
||||
def run_dienste_laden(self):
|
||||
"""Die angehakten Dienste als Layer in die Gruppe „Geodienste" hängen."""
|
||||
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
|
||||
gewaehlt = self.panel.gewaehlte_dienste()
|
||||
if not gewaehlt:
|
||||
self._show_error("Nichts ausgewählt",
|
||||
"Bitte zuerst die Liste holen und dann die gewünschten Dienste "
|
||||
"anhaken.")
|
||||
return
|
||||
linkliste.dienste_hinzufuegen(
|
||||
self.iface, self.client.base_url, vkz, self.panel.aktueller_text(), gewaehlt,
|
||||
api_key=self.client.api_key)
|
||||
self.panel.set_status("%d Geodienste werden geladen …" % len(gewaehlt))
|
||||
|
||||
def run_save_style(self):
|
||||
"""Den Stil des aktiven OGC-Layers auf den Server zurückschreiben.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user