Kartenrand überlappungsfrei anordnen (#93)

Im Standardlayout hingen Hauptlegende (oben), Quellenangabe und Kartenschild (unten) an der
Kartenhöhe; bei kleinen Verfahren waren sie zusammen höher als die Karte und überlappten.
Neues Modul print_kartenrand: Nach dem Aufbau der Vorlage (inkl. Basemap-Legende) werden die
Legenden einmal gezeichnet – die Hauptlegende filtert nach Karteninhalt, ihre Höhe steht erst
danach fest – und für 1–3 Spalten vermessen. Gewählt wird die kleinste passende Spaltenzahl
(Kartenrand wird dafür breiter); passt keine, die mit dem geringsten Platzbedarf, und die Seite
wird höher, Quellenangabe und Kartenschild rutschen nach unten. Karte bleibt in Größe und Lage.
Fehler bei der Anordnung verhindern die Vorlage nicht (Warnung). Wrapper: QgsLayoutExporter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 13:06:35 +02:00
co-authored by Claude Opus 5.5
parent 90c4e4d155
commit 006459ab61
5 changed files with 403 additions and 0 deletions
+12
View File
@@ -894,6 +894,7 @@ QgsSymbolLayerUtils: Type[Any]
QgsLayoutMeasurement: Type[Any]
QgsLayoutUtils: Type[Any]
QgsSimpleLineSymbolLayer: Type[Any]
QgsLayoutExporter: Type[Any]
SELECT_BEHAVIOR_SET: Any = None
SELECT_RELATION_INTERSECT: Any = None
PROPERTY_TYPE_EXPRESSION: Any = None
@@ -923,6 +924,7 @@ try:
QgsLayoutUtils as _QgsLayoutUtils,
QgsSymbolLayer as _QgsSymbolLayer,
QgsSimpleLineSymbolLayer as _QgsSimpleLineSymbolLayer,
QgsLayoutExporter as _QgsLayoutExporter,
Qgis as _QgisVT,
)
@@ -943,6 +945,7 @@ try:
QgsLayoutMeasurement = _QgsLayoutMeasurement
QgsLayoutUtils = _QgsLayoutUtils
QgsSimpleLineSymbolLayer = _QgsSimpleLineSymbolLayer
QgsLayoutExporter = _QgsLayoutExporter
SELECT_BEHAVIOR_SET = _QgisVT.SelectBehavior.SetSelection
SELECT_RELATION_INTERSECT = _QgisVT.SelectGeometryRelationship.Intersect
@@ -1128,6 +1131,15 @@ except Exception:
QgsSimpleLineSymbolLayer = _MockQgsSimpleLineSymbolLayer
class _MockQgsLayoutExporter:
def __init__(self, layout: Any = None):
self._layout = layout
def renderRegionToImage(self, region: Any, size: Any = None, dpi: float = -1) -> Any:
return None
QgsLayoutExporter = _MockQgsLayoutExporter
# QgsRectangle hatte im allgemeinen Mock-Block keinen Ersatz (nur Typannotation).
if "QgsRectangle" not in globals():
class _MockQgsRectangle: