- Konzept 10_basemap_legende.md: Abschnitt 10 mit Umsetzung, Abweichungen und offenen Punkten - ADR 0010: Basemap-Legende als eigenes Legendenelement mit Hilfslayern und Legendenkatalog - schnittstellen.md: neue Projektvariablen, Abschnitt 11 Basemap-Legende - modulkarte.md: neue Module, aktualisierte Zeilenzahlen - fallstricke.md: Legendengröße vor dem ersten Zeichnen, Kartenfilter, Vektorkachel-Zoom, QT_VERSION unter QGIS 3, Mock-Lücken, Offscreen-Spike in QGIS - STATUS.md: Punkt 15; Testkatalog neu erzeugt Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.1 KiB
0010 – Basemap-Legende als eigenes Legendenelement mit Hilfslayern und Legendenkatalog
Status: vorgeschlagen · Datum: 2026-10-02 · Beteiligte: Daniel Helbig, Claude Code · Ticket Plugin_SN_Basis #88
Kontext
QGIS erzeugt für Vektorkachel-Layer keine Legende (QgsVectorTileLayer setzt keine QgsMapLayerLegend,
geprüft im Quellcode 3.40, 3.44, master). Die §-38-/§-41-Drucklayouts brauchen aber eine Legende der
basemap.de-Objekte, die im Verfahrensgebiet tatsächlich dargestellt werden, mit der Signatur des Projektlayers.
Die Style-JSON von basemap.de hat 569 Style-Layer mit technischen IDs; ein Legendeneintrag wie „Kreisstraße“
verteilt sich auf bis zu 20 Styles (Kontur, Decker, Brücke, getrennte Fahrbahn …).
Ein Spike in QGIS 3.44.4 (offscreen, echte Kacheln, Gebiet bei Meißen, 619 ha) am 02.10.2026 ergab:
QgsVectorTileLayer.selectByGeometry()holt und dekodiert die Kacheln zur Zoomstufe des Maßstabs selbst (5,8 s für 10 250 Objekte, entdoppelt 3 990; Style-Zuordnung 0,5 s).- Hilfslayer in der Hauptlegende verschwinden beim Rendern, weil diese nach Karteninhalt filtert
(
setLegendFilterByMapEnabled(True)) und die Hilfslayer nicht in der Karte liegen. Außerdem müsste die Hauptlegende dafür ihre automatische Aktualisierung verlieren. - Ein eigenes Legendenelement ohne Kartenfilter zeigt alle Einträge, übersteht Speichern und Neuladen des Projekts; leere Speicherlayer lösen beim Schließen keine Rückfrage aus.
Entscheidung
Die Basemap-Legende ist ein eigenes Legendenelement „Legende Basemap“ ohne Kartenfilter und ohne
automatische Aktualisierung, dessen Einträge aus leeren, kategorisierten Speicherlayern stammen (je Gruppe
und Geometrietyp, nicht im Layerbaum, mit dem Projekt gespeichert). Welche Styles zu welchem Eintrag gehören
und welche das Symbol bilden, steht in einem versionierten Legendenkatalog sn_basis/data/basemap_legende.json,
der aus der Style-JSON erzeugt und fachlich nachbearbeitet wird. Signaturen werden zur Laufzeit aus dem
Projektlayer genommen, nicht aus dem Katalog.
Folgen
- Hauptlegende bleibt unverändert (Auto-Update, Kartenfilter); der Basemap-Layer selbst erscheint dort nicht, weil er keine Legendenknoten hat und der Filter ihn ausblendet.
- Lokale Änderungen am Basemap-Stil (Farben, abgeschaltete Styles) wirken automatisch auch in der Legende.
- Die Basemap-Legende ist eine Momentaufnahme; nach Änderungen an Karte oder Stil „Basemap-Legende aktualisieren“.
- Bei einer neuen Basemap-Stilversion muss der Katalog mit
modules/basemap_katalog.pyerneuert werden; unbekannte Styles erscheinen bis dahin unter „Sonstiges“ (abgewählt). - Je Layout liegen einige leere Speicherlayer im Projekt (nicht im Layerbaum sichtbar).
Verworfene Alternativen
- Hilfslayer in der Hauptlegende: vom Kartenfilter ausgeblendet (Spike), und Verlust der Auto-Aktualisierung.
- Eigene
QgsMapLayerLegend(Python-Unterklasse) am Vektorkachel-Layer: wird nicht im Projekt gespeichert, nach Neuladen wäre die Legende weg. - Legende direkt aus dem Signaturenkatalog: zeigt die Standarddarstellung, nicht die im Projekt angepasste.