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:
2026-10-02 12:33:00 +02:00
co-authored by Claude Opus 5.5
parent 8693fedada
commit d6d4403e46
6 changed files with 310 additions and 2 deletions
+18
View File
@@ -896,6 +896,7 @@ QgsLayoutUtils: Type[Any]
SELECT_BEHAVIOR_SET: Any = None
SELECT_RELATION_INTERSECT: Any = None
PROPERTY_TYPE_EXPRESSION: Any = None
PROPERTY_CUSTOM_DASH: Any = None
LEGEND_STYLE_HIDDEN: Any = None
LEGEND_STYLE_SUBGROUP: Any = None
STYLE_CATEGORIES_SYMBOLOGIE_BESCHRIFTUNG: Any = None
@@ -919,6 +920,7 @@ try:
QgsSymbolLayerUtils as _QgsSymbolLayerUtils,
QgsLayoutMeasurement as _QgsLayoutMeasurement,
QgsLayoutUtils as _QgsLayoutUtils,
QgsSymbolLayer as _QgsSymbolLayer,
Qgis as _QgisVT,
)
@@ -944,6 +946,12 @@ try:
PROPERTY_TYPE_EXPRESSION = getattr(getattr(_QgsProperty, "Type", None), "ExpressionBasedProperty", None)
if PROPERTY_TYPE_EXPRESSION is None:
PROPERTY_TYPE_EXPRESSION = getattr(_QgsProperty, "ExpressionBasedProperty", None)
# Schlüssel der datendefinierten Eigenschaft „eigenes Strichmuster“ als int (Basis #90);
# propertyKeys() liefert ints, das Enum ist je nach QGIS-Version gescoped oder nicht.
_strichmuster = getattr(getattr(_QgsSymbolLayer, "Property", None), "CustomDash", None)
if _strichmuster is None:
_strichmuster = getattr(_QgsSymbolLayer, "PropertyCustomDash", None)
PROPERTY_CUSTOM_DASH = int(getattr(_strichmuster, "value", _strichmuster))
LEGEND_STYLE_HIDDEN = getattr(getattr(_QgsLegendStyle, "Style", _QgsLegendStyle), "Hidden", None)
LEGEND_STYLE_SUBGROUP = getattr(getattr(_QgsLegendStyle, "Style", _QgsLegendStyle), "Subgroup", None)
_kategorie = getattr(_QgsMapLayer, "StyleCategory", _QgsMapLayer)
@@ -1018,6 +1026,15 @@ except Exception:
def fromValue(value: Any) -> "_MockQgsProperty":
return _MockQgsProperty(value)
@staticmethod
def fromExpression(expression: str, is_active: bool = True) -> "_MockQgsProperty":
eigenschaft = _MockQgsProperty()
eigenschaft._ausdruck = expression
return eigenschaft
def expressionString(self) -> str:
return getattr(self, "_ausdruck", "")
class _MockQgsRendererCategory:
def __init__(self, value: Any = None, symbol: Any = None, label: str = ""):
self._value, self._symbol, self._label = value, symbol, label
@@ -1123,6 +1140,7 @@ except Exception:
SELECT_BEHAVIOR_SET = 0
SELECT_RELATION_INTERSECT = 0
PROPERTY_TYPE_EXPRESSION = 2
PROPERTY_CUSTOM_DASH = 36
LEGEND_STYLE_HIDDEN = _MockQgsLegendStyle.Hidden
LEGEND_STYLE_SUBGROUP = _MockQgsLegendStyle.Subgroup
STYLE_CATEGORIES_SYMBOLOGIE_BESCHRIFTUNG = 3