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

Callback prüft Status

Die Callback-Funktion ist die Funktion »map_aktualisieren_hnd()« , die als Parameter eine Datenstruktur, die durch »request« dargestellt ist. Sie besteht unter anderem aus »request.responseText« und »request.status« . In der Status-Variablen landen eventuell auftretende Fehlermeldungen. Ein Status 200 bedeutet, dass die aufgerufene Seite ohne Probleme erreicht und verarbeitet wurde. In »request.responseText« ist der Inhalt der aufgerufenen Seite abgelegt. Wenn der Request-Status den Wert 200 hat, dann ruft die Callback-Funktion ihrerseits den zuvor beschriebenen Parser auf, der den in »request.responseText« gespeicherten Inhalt verarbeitet. Als Ergebnis dieses Verarbeitungsschritts erhält man ein Array, in dem alle POIs mit ihren Attributen gespeichert sind. Das wird an den Layer übergeben, falls wirklich Elemente in dieses Array eingetragen wurden.

Wie das geübte Programmiererauge schnell erkennt, eignet sich diese Art der Darstellung von POIs nur, wenn einerseits die Anzahl stark begrenzt und andererseits der Kartenausschnitt sich nicht ändert. Sicherlich hat man die Möglichkeit, die Anzahl der darzustellenden POIs anhand eines Kartenausschnitts zu bestimmen. Allerdings ist der Programmieraufwand dafür sehr hoch. Openlayers bietet auch für dieses Problem eine Lösung, die dem Entwickler viel Programmierarbeit abnimmt, wie Listing 5 zeigt.

Listing 5

Layer mit HTTP und Strategy

 

In der Funktion »map_layer_http_strategy« ist zu sehen, welche Komponenten nötig sind, um die Daten voll dynamisch vom Kartenausschnitt abhängig darzustellen. Zunächst definiert das Objekt »OpenLayers.Strategy.BBOX« . Die Strategie BBOX wird mit einem Ratio-Wert von eins definiert (siehe Kasten "BBOX und Ratio").

BBOX und Ratio

Das Attribut »ratio« des Objekts »OpenLayers.Strategy.BBOX« legt fest, wie groß das Verhältnis von angezeigten Punkten und geladenen Punkten ist. Das bedeutet, bei einem Ratio-Wert größer eins werden um den angegebenen Faktor mehr Daten geladen, als tatsächlich in der Karte angezeigt werden. Dies ist besonders dann sinnvoll, wenn ein Benutzer den Kartenausschnitt nur ein klein wenig verschiebt. So müssen für diese kleine Bewegung nicht neue Daten vom Server geladen werden. Die Anzeige wird dadurch flüssiger und schneller, da keine Wartezeiten entstehen. Allerdings erkauft man sich damit auch, dass man zu Beginn eine höhere Serverlast und Ladezeit hat. Ein Ratio-Wert von eins bedeutet, dass genauso viele Daten vom Server abgerufen werden, wie auch tatsächlich zu sehen sind.

»OpenLayers.Layer.Vector« bietet die Möglichkeit, mehrere Strategien zu verarbeiten, die in einem Array zusammengefasst sind. In diesem Beispiel ist eine Strategie, die als einziges Element des Arrays mit »new()« initialisiert wird. Im nächsten Schritt wird der Parser definiert, der die Daten in Kartenpunkte umwandelt.

Einen Kommunikationskanal für »OpenLayers.Layer.Vector« öffnet das Objekt »OpenLayers.Protocol.HTTP« , das als Parameter eine URL erwartet, unter der die Daten zu finden sind. Die Übergabeparameter für das aufzurufende Skript werden wie gehabt als Array von Attributen definiert: »params: {land: "DE", zeitschrift: "FreeX"}« , die intern mit »OpenLayers.Util.getParameterString()« wieder in eine Zeichenkette im bekannten Format umgewandelt werden. Besonders interessant sind die Attribute »srsInBBOX« , »readWithPOST« , »readWithGET« und »headers« . Das Attribut »srsInBBOX« besagt, dass die Zeichenkette der Übergabeparameter um die Koordinaten des Kartenausschnitts inklusive der Projektion ergänzt wird. Somit erhält ein CGI-Skript immer den Kartenausschnitt und die zugehörige Projektion.

Erben

Die beiden Attribute »readWithPOST« und »readWithGET« definieren, ob die HTTP-Methode POST oder GET für die Datenübertragung benutzt werden soll. Wichtig ist auch wieder die Angabe »headers« , die definiert, mit welchem MIME-Type die Daten übertragen werden. Das letzte Attribut »format« wird das Objekt angegeben, welches den Parser referenziert. Das so erzeugte Objekt »OpenLayers.Protocol.HTTP« wird zusammen mit dem Array der Strategien (»strategies« ) an »OpenLayers.Layer.Vector« übergeben.

Um die Beschreibung dieses Code-Abschnitts abzuschließen, ein paar Worte zum Parser-Objekt. Die Code-Zeile »OpenLayers_FreeX = OpenLayers.Class(OpenLayers.Format, {});« leitet vom in der Bibliothek formulierten Objekt »OpenLayers.Format« das neue Objekt »OpenLayers_FreeX« ab. Das bedeutet, es erbt die komplette Funktionalität. Um CSV-Daten zu verarbeiten, muss das neue Objekt eine eigene Routine implementieren, die diese Daten umwandelt. Dazu überschreibt man die Methode »read« von »OpenLayers.Format« , wie das in »read: [...] return parser() [...]« geschieht. Zuvor wird noch überprüft, ob es sich bei dem übergebenen Objekt um ein String-Objekt handelt, weil der Parser nur diese verarbeitet.

Listing 6 fügt alle Einzelzeile zu einem großen Ganzen zusammen, initialisiert erst die Karte und bindet sie dann als DOM-Objekt in die Webseite ein. Schließlich lädt die Funktion die Daten, die Layer und stellt die Karte dar.

Listing 6

Initialisieren der Hauptfunktion

 

Ähnliche Artikel

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