43 lines
3.1 KiB
Markdown
43 lines
3.1 KiB
Markdown
# 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.py` erneuert 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.
|