- 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>
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.
|