Basemap-Legende: Auswertung und Legendenelement im Drucklayout (#88)
Beim Erstellen einer §38-/§41-Vorlage wertet BasemapLegende die Kacheln des sichtbaren basemap.de-Layers im Verfahrensgebiet (wahlweise Druckbereich) kachelweise über selectByGeometry aus, prüft die Renderer-Styles mit derselben Zoomlogik wie QGIS und bildet daraus Legendeneinträge. Ein Mehrfachauswahl-Dialog (neu: ask_mehrfachauswahl) lässt Kategorien abwählen; die Auswahl wird im Projekt gemerkt. Die gewählten Einträge stehen mit der Signatur des Projektlayers (zoomabhängige Werte festgeschrieben) in einem eigenen Legendenelement über der Quellenangabe. Ein eigenes Element ist nötig, weil die nach Karteninhalt filternde Hauptlegende die Hilfslayer ausblenden würde. Wrapper um die nötigen QGIS-/Qt-Symbole mit Mock ergänzt (eigener Block in qgiscore_wrapper; QgsRectangle hatte bisher keinen Mock). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -981,6 +981,7 @@ class PrintLayout:
|
||||
kartenname_auswahl: str = "",
|
||||
thema: str = "",
|
||||
fit_extent_to_map: bool = True,
|
||||
basemap_legende: bool = False,
|
||||
) -> Any:
|
||||
layout_manager = self.project.layoutManager()
|
||||
existing_layout = layout_manager.layoutByName(name)
|
||||
@@ -1082,7 +1083,29 @@ class PrintLayout:
|
||||
kartenname_auswahl,
|
||||
)
|
||||
|
||||
if basemap_legende:
|
||||
self._erzeuge_basemap_legende(layout)
|
||||
|
||||
layout_manager.addLayout(layout)
|
||||
self._current_layout = None
|
||||
open_layout_designer(layout)
|
||||
return layout
|
||||
|
||||
def _erzeuge_basemap_legende(self, layout: Any) -> None:
|
||||
"""Kennzeichnet das Layout und erzeugt die Basemap-Legende (Basis #88).
|
||||
|
||||
Ein Fehler bei der Basemap-Legende darf das Anlegen der Vorlage nicht verhindern; er wird
|
||||
als Warnung gemeldet.
|
||||
"""
|
||||
from sn_basis.functions.message_wrapper import warning
|
||||
from sn_basis.modules.basemap_legende import BasemapLegende
|
||||
from sn_basis.modules.basemap_legende_layout import markiere_layout
|
||||
|
||||
markiere_layout(layout)
|
||||
try:
|
||||
ergebnis = BasemapLegende(self.project).aktualisiere(layout)
|
||||
except Exception as fehler:
|
||||
warning("Basemap-Legende", f"Die Basemap-Legende konnte nicht erzeugt werden: {fehler}")
|
||||
return
|
||||
if ergebnis.get("status") == "keine_eintraege":
|
||||
warning("Basemap-Legende", ergebnis.get("meldung", ""))
|
||||
|
||||
Reference in New Issue
Block a user