MapToPoster / src /maptoposter /layers.py
isaachwf's picture
Sync from GitHub via hub-sync
008947a verified
Raw History Blame Contribute Delete
2.11 kB
"""Map layer labels and conversion helpers."""
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class LayerDefinition:
key: str
en: str
cn: str
LAYERS: tuple[LayerDefinition, ...] = (
LayerDefinition("motorway", "Motorway", "高速公路"),
LayerDefinition("primary", "Primary Roads", "主干道"),
LayerDefinition("secondary", "Secondary Roads", "次干道"),
LayerDefinition("water", "Water", "水域"),
LayerDefinition("parks", "Parks", "公园"),
)
LAYER_KEYS = [layer.key for layer in LAYERS]
LAYERS_EN = [layer.en for layer in LAYERS]
LAYERS_CN = [layer.cn for layer in LAYERS]
_LABEL_TO_KEY = {label: layer.key for layer in LAYERS for label in (layer.en, layer.cn)}
_KEY_TO_LABEL = {
"en": {layer.key: layer.en for layer in LAYERS},
"cn": {layer.key: layer.cn for layer in LAYERS},
}
def labels_for_language(lang: str) -> list[str]:
"""Return layer labels for a UI language code."""
return LAYERS_EN if lang == "en" else LAYERS_CN
def selected_labels_to_keys(selected_labels: list[str] | tuple[str, ...] | None) -> list[str]:
"""Convert localized UI layer labels to stable layer keys."""
if not selected_labels:
return []
return [_LABEL_TO_KEY[label] for label in selected_labels if label in _LABEL_TO_KEY]
def keys_to_labels(keys: list[str] | tuple[str, ...], lang: str) -> list[str]:
"""Convert stable layer keys to localized UI labels."""
labels = _KEY_TO_LABEL["en" if lang == "en" else "cn"]
return [labels[key] for key in keys if key in labels]
def selected_layer_flags(selected_labels: list[str] | tuple[str, ...] | None) -> dict[str, bool]:
"""Return render keyword flags for selected localized layer labels."""
selected_keys = set(selected_labels_to_keys(selected_labels))
return {
"show_motorway": "motorway" in selected_keys,
"show_primary": "primary" in selected_keys,
"show_secondary": "secondary" in selected_keys,
"show_water": "water" in selected_keys,
"show_parks": "parks" in selected_keys,
}