Daten auf der eigenen Landkarte

In einem Kundenprojekt kam die Idee auf, die gewonnen verdichteten Informationen auf einer Karte darzustellen ("mal ebend schnell :-).  Unabhängig von der Unschärfe der geographischen Positionen, stellen sich dafür vier HerausforderKarte 1ungen:

  • Umrechnung einer Ortsbezeichnung in Längen- und Breitengrade.
  • Erstellung einer Karte mit den Markern.
  • Erzeugung eines Images in ausreichender Qualität.
  • Der (zeitliche) Aufwand soll möglichst klein gehalten werden.

Randbedingungen sind, dass die Daten nicht regelmäßig anfallen, die Berechnung "on the fly" erfolgt und die Abhängigkeit von externen Systemen minimiert werden muss. Dadurch fallen cloudbasierte Lösungen aus.

Was gehört dazu?

Der pragmatische Lösungsansatz basiert aus einem eigenen Map-Server auf Basis der Daten des Openstreetmap-Projekts. Ein solcher Server besteht aus den Komponenten:

  • Tile-Server: Berechnung und Auslieferung der Kartenstücke
  • Suche: Geographischen Suchmaschine
  • Webinterface: Präsentations-Frontend
  • Screenscrapping: Überführung der dynamisch erzeugten Karten in ein Image

Aufbau des Systems

Zur Installation gibt es diverse Anleitungen im Internet (alle Links sind am Ende des Artikels).

Tile-Server

Der Tile-Server besteht aus einem Apache mit dem Modul mod_tile. Das Modul reicht die Berechnung an den renderd weiter. Im Hintergrund befinden sich die Daten in einem Postgres-Datenbank. Die einzige Abweichung zur Anleitung bestand in einem eigenen Gentoo-Overay für das Apache Modul. Am Ende des Schrittes steht der eigene Tile-Server mit einer kompletten Rendering-Chain. Zum Testen ist eine einfache "Slippy Map" (zoombare und verschiebbare Karte) in einer HTML-Version abfragbar.

Slippy Map => http://maps.netluchs.de/osm/

Webinterface

Für das dynamische Webinterface kommt die Bibliothek "leaflet.js" zum Einsatz. Mit wenigen Anpassungen lassen sich hiermit Karten erstellen und Marker setzen (Beispiele liefere ich gerne auf Anfrage).

Leafletjs =>  http://maps.netluchs.de/test.html

Nominatim

Nominatim ist eine Suchsoftware des Openstreetmap-Projekts. Diese Software importiert die Daten des Projekts und berechnet daraus eigene Datenstrukturen.  Zur sauberen Partitionierung der Systeme habe ich die Daten in einen zweiten Tablespace der Postgres-Datenbank importiert. So lassen sich die Komponeten später einfach voneinander entkoppelt.

Wichtig ist: das Laden der Daten nur für Deutschland hat mehrere Tage benötigt! Geduld ist hierbei notwendig. Die in der Installationsanleitung gegebenen Optimierungsempfehlungen für Postgres sollte man auf jeden Fall beachten. Auf die optionalen Daten habe ich verzichtet.

Geografische Suche (vorwärts und rückwärts) => http://maps.netluchs.de/nominatim/

Phantomjs

Während der Map-Server alle Informationen und Karten in einer Webseite darstellt, wird für die Berichte ein Image in gute Qualität benötigt. Hierfür kommt phantomjs zum Einsatz. (Beispiele gerne auf Anfrage).

Fazit

Die Installation eines eigenen Map-Servers ist mit den entsprechenden Anleitungen weniger ein intellektuelles Problem als viel mehr eine Fleißaufgabe, die mit viel Warten verbunden ist.

Es besteht zur Zeit noch das Problem, dass einige Tiles erst nach einem Reload der Seite korrekt dargestellt werden. Dies sollte sich aber mit dem Wachstum der Caches lösen.

Die Performance der Suche wird aktuell durch die Hardware begrenzt.

Die gestellte Aufgabe - Erstellung einer Karte mit den markanten Daten - kann durch das so aufgebaute System erfüllt werden. Die Qualität von der Daten und der bereitgestellten Software begeisternd.

Quellen und Links

Tags: