Openlayers und Datenbanken

© victoroancea, 123RF

Schichtweise

Openlayers ist eine Javascript-Bibliothek, die es ermöglicht, Landkarten in Webseiten einzubinden. Die Geodaten lassen sich entweder direkt programmieren oder aus einer Datenbank lesen. Letzteres ist die eleganteste Methode, die dieser Artikel näher beschreibt.
RAID-Technologie verspricht höhere Performance und mehr Sicherheit beim permanenten Speichern von Daten. Die ADMIN-Redaktion gibt einen Überblick über ... (mehr)

Open Streetmap ist ein im Jahr 2004 gegründetes freies Projekt, dessen Ziel es ist, eine frei nutzbare und erweiterbare Weltkarte zu erstellen. Im Rahmen dieses Projekts sammeln Interessierte Geodaten, laden sie in die Datenbank und editieren sie. Dabei handelt es sich um Daten wie Straßen, Eisenbahnstrecken, Gebäude und andere erfassungswürdige geografische Informationen. Mit diesen Daten von Open Streetmap entstehen nicht nur Straßenkarten für Autofahrer, sondern auch Fahrrad- und Wanderkarten und unzählige Spezialanwendungen.

Eigenes Navi

Weil die Geoinformationen im Rahmen des Open-Streetmap-Projekts frei verfügbar sind, lassen sich das so gewonnene Kartenmaterial und die Rohdaten zur Darstellung von Fotos und Beiträgen in Blogs oder eigenen Internetpräsenzen verwenden. Selbst die Rohdaten sind für die Entwicklung frei zugänglich, womit sich Anwendungen zur Routenberechnung oder zur mobilen Navigation verwirklichen lassen. Das einzige zu zollende Tribut an die Gemeinde ist eine Quellenangabe mit Bezug auf Open Streetmap. Natürlich möchte man Landkarten in der eigenen Internetpräsenz nicht einfach nur einfügen, sondern man verfolgt damit meist auch einen bestimmten Zweck. Auf diese Art lassen sich beispielsweise im Bereich des Tourismus bestimmte Sehenswürdigkeiten oder Wanderwege darstellen. Für Segelflugpiloten sind Wetterdaten an bestimmten Orten interessant. Auch für administrative Möglichkeiten lassen sich Open-Streetmap-Karten einsetzen, indem Katasterdaten eingebunden werden. Spezielle Markierungen von Orten auf den Karten werden im Fachjargon "points of interest" oder POIs genannt (Abbildung 1).

Abbildung 1: Die Darstellung zeigt Wetterstationen auf dem Gebiet der USA. Die geografischen Positionen wurden einer Datenbank entnommen, in der circa 20 000 Stationen gespeichert sind.

Um solche Anwendungen zu realisieren, gibt es eine unter einer BSD-Lizenz stehende Programmierbibliothek namens Openlayers [1]. Das Paket ist in Javascript geschrieben und damit vollkommen unabhängig von irgendwelchen Servern oder Betriebssystemen. Voraussetzung zur Nutzung ist lediglich ein Javascript-fähiger Webbrowser. Die Kombination aus Open Streetmap und Openlayers ist sehr leistungsfähig und braucht sich hinter den kommerziellen Produkten wie Google-Maps und Google-API nicht zu verstecken.

Teamwork à la carte

Um die großen Datenmengen zu bewältigen, sind leistungsfähige Datenbankserver mit PostgreSQL und PostGIS als Datenbanksystem notwendig. Die Datenbanken speichern die Geodaten in Form von geografischen Koordinaten, die Linien und Punkte auf einer Karte beschreiben. Zusätzlich wird noch eine Information abgespeichert, welche die Art der Geodaten wie beispielsweise Autobahnen oder Gebäude beschreibt.

Die Generierung der Karten erfolgt durch einen Rendering-Server, den Kartenausschnitt in einzelne Kacheln zerlegt, um die Belastung der Netzwerke niedrig zu halten. Openlayers sorgt mit seinen Javascript-Funktionen anschließend dafür, dass die Kacheln des Kartenausschnitts auf den Client übertragen und korrekt dargestellt werden.

Wie der Name Openlayers bereits vermuten lässt, werden die Geodaten in mehreren Ebenen (Layer) in die eigene Webseite eingeblendet. Die unterste Ebene ist immer der ausgewählte Kartenausschnitt. Als Programmierer hat man die Möglichkeit, mit weiteren Layern für den Betrachter weitere nützliche Informationen anzubieten.

In den Anfängen von Openlayers gab es keinen Weg, auf die in einer Datenbank vorgehaltene Datenbestände zuzugreifen, da Javascript keine Möglichkeit bietet, auf Datenbankserver zuzugreifen. Um eigene POIs darzustellen, werden aber Datenbanken benötigt.

Alternativ bietet sich immer die Lösung an, alle POIs im Programmcode anzugeben beziehungsweise den zugehörigen Javascript-Code durch ein Perl- oder PHP-Skript zu erzeugen. Dies bedeutet aber, dass die Wartung solcher Seiten sich sehr schwierig gestaltet. Ebenso würde die Serverbelastung zunehmen und die Performance auf dem Client enorm abnehmen.

Ein Lösungsweg, die Daten aus einer Datenbank zu beziehen, wurde in Ausgabe 02/2012 der FreeX beschrieben. Über den Umweg, dass ein CGI-Skript per Iframe Zugriff auf externe Datenbestände ermöglicht, wurden die POIs in der Karte dargestellt. Die Lösung funktioniert recht gut, ist aber nicht perfekt. Gerade dann, wenn es zu Timeouts bei der Verbindung kommt, besteht die Möglichkeit, dass Daten falsch oder gar nicht dargestellt werden. Inzwischen hat sich diesbezüglich in der Entwicklung der Javascript-Bibliothek Openlayers einiges getan. Sie bietet mittlerweile sehr viele Wege, um auf externe Daten zuzugreifen.

Openlayers bietet zwei Objekte, die den Zugriff auf externe Daten erleichtern. Sie erlauben es, mithilfe der HTTP-Methoden GET und POST externe Seiten inklusive Parameterübergabe aufzurufen (siehe Kasten "GETten und POSTen"). Für die beiden HTTP-Methoden gibt es die Objekte »OpenLayers.Request.GET« und »OpenLayers.Request.POST« . Sie rufen eine externe Webseite auf, die durch ein CGI-Skript generiert wird. Das Skript wertet die von den Objekten übermittelten Parameter aus und generiert hieraus eine passende Datenbankabfrage. Das Ergebnis der Abfrage ist eine Datei im Plain-Text-Format, die ohne HTML-Notationen auskommt. Man sollte dieses Format wählen, weil es die weitere Verarbeitung erheblich vereinfacht.

GETten und POSTen

Um Webseiten mit Parametern zu versorgen, wurden die Methoden GET und POST entwickelt. Bei der Methode GET werden alle Parameter an die URL-Zeichenkette nach einem Fragezeichen angehängt. Getrennt werden die einzelnen Parameter durch das Ampersand-Zeichen »&« . So ergibt sich die Schreibweise »http://url?param_1=wert_1&...&param_n=wert_n« . In der korrekten HTML-Notation ersetzt man das Ampersandzeichen durch »&« , um W3C-konform zu bleiben. Die Vorteile dieser Methode sind, dass sich eine solche URL leichter als Lesezeichen im Browser speichern lässt und man hat bei der Entwicklung stets einen Überblick, ob alle Parameter korrekt gesetzt werden. Das ist aber auch gleichzeitig der Nachteil, da potenzielle Angreifer sehen, auf welche Art und Weise beispielsweise Daten aus einer Datenbank ausgelesen werden. Zudem beschränkt die Methode GET die maximale Länge der URL, sodass nur wenige Parameter nutzbar sind.

Die Methode POST bietet mehr vordergründige Sicherheit. Die Parameter werden nicht mehr an die URL angehängt, sondern über einen Datenkanal (Pipe) an die Webseite übermittelt. Damit haben potenzielle Angreifer zumindest etwas mehr Probleme bei einem Angriff. Ein weiterer Vorteil ist, dass Anzahl der möglichen Parameter nahezu unbegrenzt ist. Die POST-Methode hat den Nachteil, dass es keine Möglichkeit gibt, eine URL mit allen Parametern als Lesezeichen abzulegen.

Grundsätzlich besteht auch die Möglichkeit, beide Methoden gleichzeitig zu verwenden. Das sollte man allerdings vermeiden. Einerseits entspricht es nicht den Richtlinien der W3C und andererseits besteht die Möglichkeit, dass der Zugriff auf die Daten der POST-Methode nicht mehr gewährleistet ist.

Die so generierte Seite wird an den Webbrowser zurückgesendet, wo die Callback-Funktion von »OpenLayers.Request.GET« beziehungsweise »OpenLayers.Request.POST« die Informationen verarbeitet. Die Callback-Funktion läuft erst dann ab, wenn die Webseite fertig generiert ist. Das gilt übrigens auch für den Fehlerfall, den man deshalb sinnvollerweise gesondert berücksichtigen sollte. Abbildung 2 verdeutlicht den Ablauf.

Abbildung 2: Zugriff auf Datenbankinhalte mittels der Methoden OpenLayers.Request.GET und OpenLayers.Request.POST.
comments powered by Disqus

Artikel der Woche

Loadtests ohne Server

Für Loadtests der eigenen Server bietet sich die Cloud an, denn kurz getaktet lassen sich dort viele Rechnerinstanzen starten, die das eigene Budget nur wenig belasten. Noch flexibler, günstiger und besser skalierbar sind Tests mit einer Serverless-Infrastruktur wie AWS Lambda. Wir führen vor, wie Sie dort mit Serverless Artillery eigene Loadtests starten. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Container

Wie setzen Sie Container ein?

  • Gar nicht
  • Docker standalone
  • Docker mit Kubernetes
  • Docker mit Swarm
  • Docker mit anderem Management
  • LXC/LXD
  • Rocket
  • CRI-O auf Kubernetes
  • Container auf vSphere
  • Andere (siehe Kommentare auf der Ergebnisseite)

Google+

Ausgabe /2018

Microsite