diff options
| -rw-r--r-- | doc/administration/configuration.rst | 4 | ||||
| -rw-r--r-- | fietsboek/config.py | 13 | ||||
| -rw-r--r-- | fietsboek/views/tileproxy.py | 46 | 
3 files changed, 63 insertions, 0 deletions
diff --git a/doc/administration/configuration.rst b/doc/administration/configuration.rst index 5f0e3d4..e77e3cc 100644 --- a/doc/administration/configuration.rst +++ b/doc/administration/configuration.rst @@ -168,6 +168,10 @@ users will be able to use the Thunderforest maps (to protect your quota), this  can be changed by setting ``thunderforest.access = public`` (default is  "restricted"). +You can enable `Stamen <http://maps.stamen.com>`__ support by setting +``stamen.maps`` to the desired maps, e.g. ``stamen.maps = toner terrain +watercolor``. +  You can add custom tile layers in the following way:  .. code:: ini diff --git a/fietsboek/config.py b/fietsboek/config.py index 41f6a64..d95469c 100644 --- a/fietsboek/config.py +++ b/fietsboek/config.py @@ -193,6 +193,9 @@ class Config(BaseModel):      thunderforest_access: LayerAccess = Field(LayerAccess.RESTRICTED, alias="thunderforest.access")      """Thunderforest access restriction.""" +    stamen_maps: PyramidList = Field([], alias="stamen.maps") +    """Enabled stamen maps.""" +      disable_tile_proxy: bool = Field(False, alias="fietsboek.tile_proxy.disable")      """Disable the tile proxy.""" @@ -216,6 +219,16 @@ class Config(BaseModel):              raise ValueError(f"Unknown mailing scheme {parsed.scheme}".strip())          return value +    @validator("stamen_maps") +    def _known_stamen(cls, value): +        """Ensures that the stamen maps are known.""" +        maps = set(value) +        known_maps = {"toner", "terrain", "watercolor"} +        bad_maps = maps - known_maps +        if bad_maps: +            raise ValueError("Unknown stamen maps: " + ", ".join(bad_maps)) +        return value +      def derive_secret(self, what_for):          """Derive a secret for other parts of the application. diff --git a/fietsboek/views/tileproxy.py b/fietsboek/views/tileproxy.py index f0612dc..61747d4 100644 --- a/fietsboek/views/tileproxy.py +++ b/fietsboek/views/tileproxy.py @@ -174,6 +174,45 @@ DEFAULT_TILE_LAYERS = [      ),  ] +STAMEN_LAYERS = [ +    TileSource( +        "stamen-toner", +        "Stamen Toner", +        "https://stamen-tiles.a.ssl.fastly.net/toner/{z}/{x}/{y}.png", +        LayerType.BASE, +        12, +        LayerAccess.PUBLIC, +        f'{_jb_copy} | Map tiles by <a href="http://stamen.com">Stamen Design</a>, ' +        'under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>. ' +        'Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under ' +        '<a href="http://www.openstreetmap.org/copyright">ODbL</a>.', +    ), +    TileSource( +        "stamen-terrain", +        "Stamen Terrain", +        "https://stamen-tiles.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png", +        LayerType.BASE, +        12, +        LayerAccess.PUBLIC, +        f'{_jb_copy} | Map tiles by <a href="http://stamen.com">Stamen Design</a>, ' +        'under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>. ' +        'Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under ' +        '<a href="http://www.openstreetmap.org/copyright">ODbL</a>.', +    ), +    TileSource( +        "stamen-watercolor", +        "Stamen Watercolor", +        "https://stamen-tiles.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png", +        LayerType.BASE, +        12, +        LayerAccess.PUBLIC, +        f'{_jb_copy} | Map tiles by <a href="http://stamen.com">Stamen Design</a>, ' +        'under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>. ' +        'Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under ' +        '<a href="http://creativecommons.org/licenses/by-sa/3.0">CC BY SA</a>.', +    ), +] +  TTL = datetime.timedelta(days=7)  """Time to live of cached tiles.""" @@ -280,6 +319,7 @@ def extract_tile_layers(config):      """      layers = []      layers.extend(_extract_thunderforest(config)) +    layers.extend(_extract_stamen(config))      layers.extend(_extract_user_layers(config))      return layers @@ -312,6 +352,12 @@ def _extract_thunderforest(config):              ) +def _extract_stamen(config): +    layers = {layer.key: layer for layer in STAMEN_LAYERS} +    for name in config.stamen_maps: +        yield layers[f"stamen-{name}"] + +  def _extract_user_layers(config):      # Any other custom maps      for layer in config.tile_layers:  | 
