Basemap: Punktlinien in Karte und Legende sichtbar machen (#90)
basemap.de zeichnet Punktlinien mit Strichlänge 0 und runder Linienkappe (MapLibre-Muster); QGIS übernimmt das beim Import 1:1, Qt zeichnet Striche der Länge 0 aber nicht. Baumreihen, Hecken, Durchlässe, Seilbahnen u. a. (12 Styles) fehlten dadurch in Karte und Legende. Neues Modul basemap_stilkorrektur: korrigiere_punktlinien(layer) ersetzt Strichlänge 0 durch 0,01 im festen Strichmuster und in den array(...)-Mustern des zoomabhängigen Ausdrucks; idempotent, andere Styles unverändert. Ausgelöst per Knopf „Punktlinien korrigieren“ im Basemap-Bereich, sicherbar als Stilvorlage. Wrapper: PROPERTY_CUSTOM_DASH, QgsProperty.fromExpression im Mock. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,8 +2,9 @@
|
||||
sn_basis/ui/widgets/basemap_bereich.py – einklappbarer Bereich „Basemap“ im Druck-Tab
|
||||
|
||||
Einstellungen der Basemap-Legende (Auswertebereich, Erzeugen beim Anlegen der Vorlage),
|
||||
„Basemap-Legende aktualisieren“ für bestehende Vorlagen und lokale Stilvorlagen des
|
||||
Basemap-Layers (laden, speichern, als Standard markieren, löschen). Basis #88.
|
||||
„Basemap-Legende aktualisieren“ für bestehende Vorlagen, lokale Stilvorlagen des
|
||||
Basemap-Layers (laden, speichern, als Standard markieren, löschen) und „Punktlinien
|
||||
korrigieren“ (Basis #90). Basis #88.
|
||||
|
||||
Die Handler enthalten nur Ablauf und Rückfragen; die Logik liegt in
|
||||
``modules/basemap_legende`` und ``modules/basemap_stilvorlagen``.
|
||||
@@ -30,6 +31,7 @@ from sn_basis.functions.qt_wrapper import (
|
||||
)
|
||||
from sn_basis.modules import basemap_legende as legende
|
||||
from sn_basis.modules.basemap_legende_layout import layouts_mit_basemap_legende
|
||||
from sn_basis.modules.basemap_stilkorrektur import korrigiere_punktlinien
|
||||
from sn_basis.modules.basemap_stilvorlagen import BasemapStilvorlagen
|
||||
|
||||
TITEL = "Basemap"
|
||||
@@ -109,6 +111,14 @@ class BasemapBereich(QWidget):
|
||||
zeile.addWidget(knopf_stil)
|
||||
spalte.addLayout(zeile)
|
||||
|
||||
self._punktlinien_btn = QPushButton("Punktlinien korrigieren", self)
|
||||
self._punktlinien_btn.setToolTip(
|
||||
"Baumreihen, Hecken, Durchlässe u. a. zeichnet QGIS aus dem Basemap-Stil nicht (Strichlänge 0). "
|
||||
"Korrigiert die Darstellung im Projekt; mit „Speichern unter …“ als Stilvorlage sichern."
|
||||
)
|
||||
self._punktlinien_btn.clicked.connect(lambda *_: self._on_punktlinien_korrigieren())
|
||||
spalte.addWidget(self._punktlinien_btn)
|
||||
|
||||
inhalt.setLayout(spalte)
|
||||
inhalt.setVisible(False)
|
||||
self._inhalt = inhalt
|
||||
@@ -162,6 +172,7 @@ class BasemapBereich(QWidget):
|
||||
self._layout_combo.clear()
|
||||
self._layout_combo.addItems(layouts_mit_basemap_legende(self._projekt()))
|
||||
self._aktualisieren_btn.setEnabled(layer is not None and self._layout_combo.count() > 0)
|
||||
self._punktlinien_btn.setEnabled(layer is not None)
|
||||
|
||||
self._stil_combo.clear()
|
||||
for vorlage in self._vorlagen().liste():
|
||||
@@ -196,6 +207,19 @@ class BasemapBereich(QWidget):
|
||||
elif ergebnis["status"] != "abgebrochen":
|
||||
info(TITEL, ergebnis["meldung"])
|
||||
|
||||
# --- Handler: Darstellung korrigieren ------------------------------
|
||||
|
||||
def _on_punktlinien_korrigieren(self) -> None:
|
||||
layer = self.basemap_layer()
|
||||
if layer is None:
|
||||
warning(TITEL, KEIN_LAYER_TEXT)
|
||||
return
|
||||
anzahl = korrigiere_punktlinien(layer)
|
||||
if anzahl:
|
||||
success(TITEL, f"{anzahl} Punktlinien-Styles korrigiert. Basemap-Legende ggf. aktualisieren.")
|
||||
else:
|
||||
info(TITEL, "Keine Punktlinien zu korrigieren.")
|
||||
|
||||
# --- Handler: Stilvorlagen ------------------------------------------
|
||||
|
||||
def _gewaehlte_vorlage(self) -> str:
|
||||
|
||||
Reference in New Issue
Block a user