Files
Projektwissen/docs/entscheidungen/0010-basemap-legende-eigenes-legendenelement.md
T
DanielandClaude Opus 5.5 a1f399b150 Basemap-Legende (Basis #88): Umsetzung dokumentiert, ADR 0010, Wissensbasis
- 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>
2026-10-02 12:03:14 +02:00

3.1 KiB
Raw Blame History

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.