Manchmal braucht man Kartenkachel aus einem WMS Server…
Ich brauchte mal wieder topographische (Höhen-)daten, aber anders als beim Beitrag zum Klimawandel nicht um sie in Blender zu verarbeiten, sondern in einer Form um sie im Browser weiterverarbeiten zu können. Leider sind nur über einen WMS-Service abrufbar…
Es gibt zwar verschiedene Programme, wie wms-tiles-downloader oder wms-tile-get, aber diese haben Probleme, wenn die Daten nicht in der Web-Mercator-Projektion (EPSG:3857) ausgeliefert werden.
Glücklicherweise gibt es Mapproxy. Auch wenn es eigentlich gar nicht direkt für diesen Zweck gedacht ist, erledigt es die Aufgabe schnell und bietet dazu noch fortschrittliche Features wie die Reprojektion der Kacheln in verschiedene Koordinatenreferenzsysteme.
Ein Beispiel ist das Digitales Geländemodell (DGM1) für Niedersachsen. Dieses wird vom Landesamt für Geoinformation und Landesvermessung Niedersachsen (LGLN) online als WMS-Endpunkt bereitgestellt.
Mapproxy kann diesen Endpunkt nutzen und direkt in ein anderes Zugriffsschema als WMS übersetzen. Für das Beispiel soll das Slippy-Map-URL-Schema genutzt werden, das auch von OpenStreetMap verwendet wird.
Mapproxy kann entweder einfach über die Paketverwaltung (pip, brew, apk, apt-get, dnf etc.) installiert werden oder es kann Docker-Image genutzt werden. Mehr dazu in der Dokumentation.
Danach reicht es ein leeres Verzeichnis anzulegen und die folgenden Dateien darin abzulegen.
Die Konfiguration für den Service selbst:
# mapproxy.yaml
# -----------------------
# MapProxy configuration.
# -----------------------
services:
# Dies ist der Webservice, der beim Einrichten der Konfiguration nützlich ist.
# Siehe http://localhost:8080/demo/
demo:
# Der Dienst zum Bereitstellen der Kacheln
tms:
use_grid_names: false
origin: 'nw'
sources:
dgm1_wms:
type: wms
supported_srs: ['EPSG:4326']
req:
url: https://opendata.lgln.niedersachsen.de/doorman/noauth/dgm_wms?
layers: ni_dgm1_farbe
transparent: true
layers:
- name: dgm1
title: DGM1
sources: [dgm1_cache]
caches:
# Dies ist der Cache für die neu projizierten Kacheln, speichern Sie sie.
dgm1_cache:
grids: [webmercator]
sources: [dgm1_cache_original]
# Hiermit werden der Speicherort und die Verzeichnisstruktur der heruntergeladenen Kacheln definiert.
cache:
type: file
directory: ./cache_data
directory_layout: tms
coverage:
# Dadurch werden die heruntergeladenen Kacheln auf einen Bereich um Göttingen beschränkt.
bbox: [9.7, 51.45, 10.1, 51.6]
srs: EPSG:4326
# Dies ist der Cache für die heruntergeladenen Kacheln, diese werden nicht gespeichert.
dgm1_cache_original:
sources: [dgm1_wms]
grids: [dgm1_grid]
disable_storage: true
grids:
# Die SRS für die Quelle, die für die Neuprojektion der Kacheln mit Mapproxy erforderlich ist.
dgm1_grid:
srs: 'EPSG:4326'
webmercator:
base: GLOBAL_WEBMERCATOR
globals:
mapserver:
working_dir: .
image:
resampling_method: bicubic
formats:
image/png:
encoding_options:
# Dies ist wichtig für die topografischen Kacheln, um sicherzustellen, dass die Farben
# zwischen den Kacheln übereinstimmen. Andernfalls kommt es zu Höhenunterschieden zwischen den Kacheln.
quantizer: mediancut
Die Konfiguration für den “Seeder” (eigentlich dazu gedacht den Cache des Services zu füllen, wir benutzen ihn als Downloader):
#seed.yml
# -------------------------------
# MapProxy seeding configuration.
# -------------------------------
seeds:
dgm1_seed:
caches: [dgm1_cache]
coverages: [goettingen]
# Es ist möglich, die abzurufenden Zoom-Stufen zu konfigurieren.
levels:
from: 11
to: 15
coverages:
goettingen:
bbox: [9.7, 51.45, 10.1, 51.6]
srs: EPSG:4326
Um zu testen, ob die Konfiguration korrekt ist, genügt es, mapproxy-util serve-develop ./mapproxy.yaml auzuführen. Danach kann die Adresse http://localhost:8080/demo/ im Browser geöffnet werden um die Konfiguration zu testen.
Wenn alles (Ausgangsservice, Projektionen, Bild- und Verzeichnisformate) richtig konfiguriert ist, kann mit dem Befehl mapproxy-seed der Download gestartet werden:
mapproxy-seed -s ./seed.yaml -f ./mapproxy.yaml
Nach Abschluss des Prozesses befinden sich die gewünschten Verzeichnisse und Dateien im Verzeichnis cache_data.
Das Unterverzeichnis tile-locks kann gelöscht werden.