RAID-Technologie verspricht höhere Performance und mehr Sicherheit beim permanenten Speichern von Daten. Die ADMIN-Redaktion gibt einen Überblick über ... (mehr)

Datenbank mit Strategie

Die beiden eben beschriebenen Objekte eignen sich sehr gut, um POIs schnell und einfach darzustellen. Ein Nachteil ist allerdings, dass es sehr aufwendig ist, eine vom Kartenausschnitt abhängige Anzahl von Punkten darzustellen.

Aber auch hier bietet Openlayers inzwischen Abhilfe: »OpenLayers.Strategy.BBOX« mit »OpenLayers.Protocol.HTTP« und »OpenLayers.Layer.Vector« bilden ein unschlagbares Team zur Darstellung dynamischer Landkarten auf der eigenen Webseite.

Zugang über Layer

Die in einer Landkarte eingetragenen geografischen Punkte werden in einer Ebene durch das Objekt »OpenLayers.Layer.Vector« zusammengefasst. Darin sind zwei interessante Schnittstellen integriert, die einen Zugriff auf externe Datenbestände erlauben und die Ausgabe steuern. Die Funktionsweise ist komplexer als bei den Objekten der Gruppe »OpenLayers.Request« . Kartenausschnitte lassen sich per Maus vergrößern, verkleinern und verschieben. Jeder dieser Aktionen generiert ein Ereignis (Event), das Openlayers mitteilt, einen neuen Kartenausschnitt zu laden. Diese Events werden an alle Ebenen (Layer) übermittelt, um eine Neuberechnung der Position auf der Karte zu erzwingen. Wenn viele POIs eingetragen sind, erfordert das viel Rechenleistung und viel Zeit aufseiten des Clients. Das lässt sich reduzieren, indem man nur die Objekte neu darstellt, die im Kartenausschnitt auch wirklich zu sehen sind oder neu hinzukommen. Diese Strategie realisiert das Objekt »OpenLayers.Strategy.BBOX« .

Um analog die Positionsangaben der einzelnen POIs zu erhalten, bedient man sich eines Kommunikationskanals mit dem Objekt »OpenLayers.Protocol.HTTP« . Es übermittelt den aktuellen Kartenausschnitt an ein CGI-Skript und gibt als Ergebnis eine Liste mit POIs zurück, die im neuen Kartenausschnitt zu sehen sind. Die neuen Angaben werden an »OpenLayers.Layer.Vector« zurückgegeben und dargestellt, die nicht mehr sichtbaren POIs automatisch gelöscht. Das reduziert nicht nur den Speicherbedarf, sondern gleichermaßen die Rechenzeit. Abbildung 3 stellt den Ablauf nochmals grafisch dar.

Abbildung 3: Dynamische Darstellung von POIs in Abhängigkeit vom Kartenausschnitt.

Einen weiteren Vorteil bietet diese Methode bei großen Mengen von POIs: Es lässt sich angeben, wie viele Punkte maximal dargestellt werden sollen. So kann man beispielsweise erst eine Grobübersicht über die wichtigsten POIs anzeigen. Je kleiner der Kartenausschnitt gewählt wird, umso mehr verfeinert man dann die Übersicht. Auch hier sei Abbildung 1 nochmals als Beispiel herangezogen. Es gibt in den USA circa 3100 Wetterstationen als POIs. Um diese große Anzahl anzuzeigen, braucht ein durchschnittlicher Webbrowser etwa zwanzig Sekunden. Die Darstellung nach der eben beschriebenen Methode dauert im Vergleich nur noch eine Sekunde, weil nur er noch etwa 160 Stationen verarbeiten muss.

Nach diesen theoretischen Betrachtungen geht es nun ans Eingemachte. Um die Evolution der Zugriffsarten zu verdeutlichen, sind in Listing 1 die im theoretischen Teil beschriebenen drei Arten kodiert. Die einfachste Möglichkeit ist in Abschnitt eins formuliert. Die geografischen Punkte werden statisch zu einer Ebene (Layer) hinzugefügt. Dies geschieht in der Funktion »map_poi« : nach der Definition der Koordinaten und deren Transformation werden sie mit »layer.addFeatures« in die Ebene »layer« eingefügt. Dies wurde in der Ausgabe 2/2012 der FreeX ausführlich erläutert.

Listing 1

Initialisierung

 

Listing 1 zeigt den Code, der die Arbeit mit der Openlayers-Bibliothek initialisiert, zum Beispiel die Variablen für die Kartenprojektion, den Kartenausschnitt und so weiter. In Listing 2 ist eine Funktion zu sehen, die statische Points of Interest anzeigt, die per »map_poi()« eingebunden werden.

Listing 2

Layer mit statischen POI

 

Um die Daten, die aus einer Datenbank ausgelesen wurden, in Openlayers zu übernehmen, muss man sich Gedanken über ein Datenaustauschformat machen. In vielen Fällen bietet sich das CSV-Format an, bei dem die einzelnen Werte durch Semikolons getrennt werden. Allerdings muss man auf das Encoding der Daten achten: Heutige Anwendungen verwenden meist UTF-8, in das man die Daten aus einer Datenbank gegebenenfalls konvertieren muss.

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019