OSM-Kacheln offline mit Leaflet.js verwenden

Ich recherchiere gerade, wie ich eine Leaflet Karte (https://leafletjs.com/) offline nutzen könnte. Das Gebiet, das mir wichtig ist, ist 98 Kilometer x 156 Kilometer groß. Wenn ich richtig recherchiert habe, dann kann man die vielen verschiedenen Möglichkeiten in drei Kategorien einteilen.

  1. Man kann einen eigenen Tile-Server in seinem Netzwerk installieren
  2. Man kann einen Tile-Downloader nutzen
  3. Man kann Leaflet-Plugins verwenden, die die Tiles lokal im Browser Speichern.

Um mich für die beste Alternative zu entscheiden möchte ich gerne die Vorteile und Nachteile gegenüber stellen. Ich habe aber noch nicht viel Erfahrung und übersehe da vielleicht etwas. Deshalb würde ich mich freuen, wenn hier jemand schon Erfahrung gesammelt hat und meine Aufzählung um die Punkte die ich vielleicht vergessen habe, ergänzen würde.
Vielleicht bringt meine Aufstellung ja auch dem ein oder anderen etwas, der vor dem gleichen Problem steht.


  1. Eigener Tile Server

Vorteil

  • Mehrere unterschiedliche Rechner können auf den eigenen Tile-Server zugreifen.
  • Endanwender müssen nichts selbst tun. Sie können ganz einfach die lokale URL in ihrem Browser aufrufen.
  • Die spätere Vergrößerung des Bereiches wäre einfach. Es müsste nur eine passende Datei (Planet.osm) heruntergeladen werden.

Nachteil

  • Installation des Tile-Servers ist relativ aufwendig.
  • Um die Kacheln neu zu erstellen, muss eine Datei (Planet.osm) heruntergeladen werden. Es ist schwierig den Bereich einzugrenzen. Die Daten für die ganze Erde würden zwischen 4 und 5 Gigabyte in Anspruch nehmen: https://planet.openstreetmap.org/. Das Eingrenzen auf ein Bundesland wäre die beste Alternative (https://download.geofabrik.de/europe/germany.html) für meinen Anwendungsfall. Für Niedersachsen wäre die Datei Planet.osm 256 MB groß.

  1. Tile Downloader

Zum Beispiel https://wiki.openstreetmap.org/wiki/Mobile_Atlas_Creator oder http://maperitive.net/

Vorteil

  • Die Installation des Programms zum Tile-Download ist einfacher. Zumindest einfacher, als die Installation eines OSM-Tile-Servers.
  • Die Kacheln können auf einem Server abgelegt werden und so von mehreren Rechner zusammen genutzt werden.

Nachteil

  • Rechtlich unsicher, da ich keine Massenimporte machen darf.
  • Es muss ein Programm zum Tile-Download installiert werden
  • Um den in Frage kommenden Bereich abzudecken müssten etwa 89500 Tiles heruntergeladen werden, wenn man alle Zoom-Stufen bis Zoom-Stufe 16 nutzen will. Die Größe der Kacheln ist unterschiedlich. Wenn ich von durchschnittlich 50 KByte ausgehe, kommen hier mehr als 4 GByte zusammen.
    (Zoom 16 = 66810 Kacheln; Zoom 15 =16896 Kacheln; Zoom 14 = 4224 Kacheln; Zoom 13 = 1088 Kacheln; Zoom 12 =272 Kacheln; Zoom 11= 81 Kacheln; Zoom 10 =25 Kacheln; Zoom 9 = 9 Kacheln; Zoom 8 = 4 Kacheln; Zoom 7 = 4 Kacheln; Zoom 6 = 2 Kacheln; Zoom 5,4,3,2,1 = 1 Kachel)

  1. Leaflet Plugin

(https://github.com/robertomlsoares/leaflet-offline oder https://github.com/allartk/leaflet.offline )
Vorteil

  • Es ist keine spezielle Software erforderlich. Das Integrieren eines Plugins ist erforderlich.
  • Der Benutzer kann selbst auswählen, welche Kacheln er offline benötigt.
  • Ein Update der Kacheln kann vom Benutzer selbst veranlasst werden und ist relativ einfach.

Nachteil

  • Es muss ein Plugin in die Karte integriert werden.
  • Der Endanwender ist selbst für den Download der Kacheln zuständig.
  • Die Kacheln müssen auf jedem lokalen Rechner heruntergeladen werden.
  • Es ist nur schwer möglich, den gesamten Bereich abzudecken, da das Zwischenspeichern von 4 GByte in einem JavaScript Objekt damit höchstwahrscheinlich nicht gut zurecht kommt.

Möglichkeit 2 würde Möglichkeit 1 voraussetzen, da der Download von so vielen Tiles gegen die Nutzungsbedingungen von jedem öffentlich erreichbaren Tileserver verstoßen dürfte. Gleiches dürfte auch für Möglichkeit 3 gelten.

Wenn du uns erzählst, was das Ziel deiner Bemühungen ist, können wir dir vielleicht alternative Vorschläge machen.

Maperitive ist recht anfängerfreundlich, und wenn ich mich recht entsinne kann man auf einem Extrakt auch eine bbox auswählen zum tiles erstellen.

@SammysHP @MKnight
Vielen Dank für eure Meinungen.

@SammysHP Im Moment gehe ich davon aus, dass die Karte nur auf einem Laptop - unterwegs, wenn gerade kein Internet zur Verfügung steht - offline verfügbar sein soll. Da ich aber öfter auf das Problem stoße, möchte ich gerne einmal alle Möglichkeiten genau betrachten. Welche Alternativen gäbe es denn noch?

@Mknight Ja, Maperitive ist wirklich sehr intuitiv und man kann eine bbox eingeben. Man kann sogar mit dem Befehl

generate-tiles minzoom=1 maxzoom=2 

Zoom-Stufen festlegen. Mit einem kleinen Bereich habe ich das gestern ausprobiert und es hat auf Anhieb funktioniert. Und auch das Einbinden in Leaflet war einfach.
Ich tue mich aber etwas schwer mit den Bedingungen. Diese sind ja hier beschrieben: https://operations.osmfoundation.org/policies/tiles/.
Für mein konkretes Beispiel würde der OSM-Tile-Server in der Summe sogar weniger belastet (Die Karte wird von dem Laptop häufig aufgerufen in allen Zoom-Stufen aufgerufen und die Kacheln müssen nicht aktuell sein. Ein halbjährliches Update wäre sicherlich ausreichen). Sehe ich es richtig, dass ich bis zur Zoom-Stufe 16 mit Maperitive diesen Bereich downloaden dürfte ohne einen Systemadministrator vorher zu benachrichtigen? (Falls die Frage hier im Forum nicht beantworte werden kann würde ich einen Admin fragen, bevor mein Anliegen konkret wird.)

Maperitive rendert die Karten selbst und greift nicht auf andere Tileserver zu. Wenn du damit zufrieden bist, wäre das ja schon mal eine mögliche Lösung für dich.

Brauchst du zwingend Leaflet? Ansonsten gibt es auch noch diverse Programme, die komprimierte OpenStreetMap-Karten in Echtzeit anzeigen können, beispielsweise QMapShack oder Cruiser.

Die Frage stellt sich imho bei Maperitive nicht. Ob man die generierten Tiles in OL oder LL verwendet,sollte doch egal sein, oder überseh ich was?

welches Betriebssystem? (*)

Gruss
walter

*) Windows oder was richtiges? :wink:

Ja, denn wie ich auch erwähnt hatte, gibt es Programme zum Anzeigen von Karten, die nicht im Browser laufen.

Die technisch einfachste Lösung ist:

  1. Man besorgt sich die Tiles komplett, am besten als MBTiles-Datei. Findet man keine Quelle dafür, dann rendert man sich die Tiles mit Maperitive.

  2. Man zeigt die Tiles mit Leaflet an.

Dazu braucht man weder eine PostGIS-Datenbank noch einen Tile-Server. Ein solcher ist nur sinnvoll, wenn man den Speicherplatz für die Tiles reduzieren will, die OSM-Daten häufig aktalisieren möchte (täglich, wöchentlich) oder mehrere Clients zu bedienen hat. All das ist hier nicht der Fall.

EDIT: QMapShack unterstützt mW auch das MBTiles-Format. Wenn das funktioniert kann man auch auf Browser, Javascript und Leaflet verzichten.

könnte übrigens, je nachdem wie viel bzw. wie wenig Bumms der Laptop hat evtl. für Maperitive schon zu groß sein.

jaein. Wenn man keine Rohdaten lädt und das Programm initial startet werden durchaus die Mapnik Webtiles geladen und im Cache auf Platte abgelegt.

Wenn du Maperitive als Renderer nutzt, dann lädst du dir ja nicht die Tiles vom Tilesserver, sondern du lädst dir vorher einen Rohdaten-Extrakt von der geofabrik und filterst den womöglich noch mit osmconvert und osmfilter. Diese Rohdaten kannst du dann mit unterschiedlichen Regeln rendern, generieren und dann exportieren lassen.

Ich zeige auf der Leaflet-Karte auch GeoJSON Daten an. Ich kenne QMAPSHACK oder Cruiser nicht gut. Das was mit Leaflet oder Open Layers möglich ist, bieten diese aber soweit ich sehe mit.

Und vielen Dank für diesen Hinweis. Ich hatte mir bisher nicht angesehen wie die Tiles erstellt werden. Nun verstehe ich warum manche Programme geblockt werden und andere nicht.

iOS. Aber wenn ein Linux oder Windows eine einfachere Möglichkeit bieten würde wäre dies auch eine Überlegung wert.

Vielen Dank für deine Einschätzung.

Danke dir. Ich werde gegebenenfalls darauf achten Rohdaten zu laden und Maperitive als Renderer zu verwenden.