26.02.2014 Aufrufe

ADMIN Magazin Gestapelt - Schneller und sicherer mit RAID (Vorschau)

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Openlayers<br />

Webbrowser<br />

Generierte<br />

HTML-Seite<br />

Content-Type:<br />

text/plain<br />

dynamischer Landkarten auf der eigenen<br />

Webseite.<br />

Zugang über Layer<br />

OpenLayers.Request.POST<br />

OpenLayers.Request.GET<br />

Callback zu<br />

OpenLayers.Request.POST<br />

OpenLayers.Request.GET<br />

Webseite <strong>mit</strong><br />

JavaScript<br />

Parameter auswerten<br />

Datenbank abfragen<br />

HTML-Code genieren<br />

CGI-Skript für Datenbankzugriff<br />

Die in einer Landkarte eingetragenen geografischen<br />

Punkte werden in einer Ebene<br />

durch das Objekt »OpenLayers.Layer.Vector«<br />

zusammengefasst. Darin sind zwei<br />

interessante Schnittstellen integriert, die<br />

einen Zugriff auf externe Datenbestände<br />

Datenbank<br />

Abbildung 2: Zugriff auf Datenbankinhalte <strong>mit</strong>tels der Methoden »OpenLayers.Request.GET« <strong>und</strong><br />

»OpenLayers.Request.POST«.<br />

Listing 1: Initialisierung<br />

01 /* Projektion definieren */<br />

02 var spherMerc = new OpenLayers.<br />

Projection('EPSG:900913');<br />

03 var epsg4326 = new OpenLayers.<br />

Projection('EPSG:4326');<br />

04 var zoom = 14;<br />

05 <br />

06 /* Kartenausschnitt definieren */<br />

07 var l = new OpenLayers.LonLat(8, 53).<br />

transform(epsg4326, spherMerc);<br />

erlauben <strong>und</strong> die Ausgabe steuern. Die<br />

Funktionsweise ist komplexer als bei<br />

den Objekten der Gruppe »OpenLayers.<br />

Request«. Kartenausschnitte lassen sich<br />

per Maus vergrößern, verkleinern <strong>und</strong><br />

verschieben. Jeder dieser Aktionen generiert<br />

ein Ereignis (Event), das Openlayers<br />

<strong>mit</strong>teilt, einen neuen Kartenausschnitt zu<br />

laden. Diese Events werden an alle Ebenen<br />

(Layer) über<strong>mit</strong>telt, um eine Neuberechnung<br />

der Position auf der Karte zu<br />

08 var r = new OpenLayers.LonLat(14, 43).<br />

transform(epsg4326, spherMerc);<br />

09 var extent = new OpenLayers.Bo<strong>und</strong>s(l.lon,<br />

l.lat, r.lon, r.lat);<br />

10 <br />

11 /* allgemeine Variablen */<br />

12 var freex, freex_o_r_p, freex_l_h_s;<br />

13 var <strong>mit</strong>Transformation = true;<br />

14 var ohneTransformation = false;<br />

15 ...<br />

erzwingen. Wenn viele POIs eingetragen<br />

sind, erfordert das viel Rechenleistung<br />

<strong>und</strong> viel Zeit aufseiten des Clients. Das<br />

lässt sich reduzieren, indem man nur<br />

die Objekte neu darstellt, die im Kartenausschnitt<br />

auch wirklich zu sehen sind<br />

oder neu hinzukommen. Diese Strategie<br />

realisiert das Objekt »OpenLayers.Strategy.BBOX«.<br />

Um analog die Positionsangaben der<br />

einzelnen POIs zu erhalten, bedient<br />

man sich eines Kommunikationskanals<br />

<strong>mit</strong> dem Objekt »OpenLayers.Protocol.<br />

HTTP«. Es über<strong>mit</strong>telt den aktuellen Kartenausschnitt<br />

an ein CGI-Skript <strong>und</strong> gibt<br />

als Ergebnis eine Liste <strong>mit</strong> POIs zurück,<br />

die im neuen Kartenausschnitt zu sehen<br />

sind. Die neuen Angaben werden an<br />

»OpenLayers.Layer.Vector« zurückgegeben<br />

<strong>und</strong> dargestellt, die nicht mehr sichtbaren<br />

POIs automatisch gelöscht. Das<br />

reduziert nicht nur den Speicherbedarf,<br />

sondern gleichermaßen die Rechenzeit.<br />

Abbildung 3 stellt den Ablauf nochmals<br />

grafisch dar.<br />

Einen weiteren Vorteil bietet diese Methode<br />

bei großen Mengen von POIs: Es<br />

lässt sich angeben, wie viele Punkte maximal<br />

dargestellt werden sollen. So kann<br />

man beispielsweise erst eine Grobübersicht<br />

über die wichtigsten POIs anzeigen.<br />

Je kleiner der Kartenausschnitt gewählt<br />

wird, umso mehr verfeinert man dann<br />

die Übersicht. Auch hier sei Abbildung 1<br />

nochmals als Beispiel herangezogen. Es<br />

gibt in den USA circa 3100 Wetterstationen<br />

als POIs. Um diese große Anzahl anzuzeigen,<br />

braucht ein durchschnittlicher<br />

Webbrowser etwa zwanzig Sek<strong>und</strong>en.<br />

Die Darstellung nach der eben beschriebenen<br />

Methode dauert im Vergleich nur<br />

noch eine Sek<strong>und</strong>e, weil nur er noch<br />

etwa 160 Stationen verarbeiten muss.<br />

Nach diesen theoretischen Betrachtungen<br />

Listing 2: Layer <strong>mit</strong> statischen POI<br />

01 function map_poi(layer, lon, lat, label,<br />

farbe) {<br />

02 var l = new OpenLayers.LonLat(lon, lat).<br />

03 transform(epsg4326, spherMerc);<br />

04 var point = new OpenLayers.Geometry.<br />

Point(l.lon, l.lat);<br />

05 var pf = new OpenLayers.Feature.<br />

Vector(point);<br />

06 if (pf) {<br />

07 pf.attributes = {text: label, color:<br />

farbe};<br />

08 layer.addFeatures([pf]);<br />

09 }<br />

10 }<br />

11 <br />

12 function map_layer(map, layer_name) {<br />

13 var layer = new OpenLayers.Layer.<br />

Vector(layer_name, {<br />

14 projection: map.displayProjection,<br />

15 renderers: map.renderer,<br />

16 displayInLayerSwitcher: true,<br />

17 wrapDateLine: false,<br />

18 displayOutsideMaxExtend: true,<br />

19 isBaseLayer: false,<br />

20 styleMap: new OpenLayers.StyleMap(style)<br />

21 });<br />

22 <br />

23 map_poi(layer, 9.00448, 48.68750,<br />

24 "FreeX‐Verlag", "#FFEE00");<br />

25 map_poi(layer, 11.80008, 47.85878,<br />

26 "FreeX‐Leser", "#FFEE00");<br />

27 map_poi(layer, 11.55735, 48.14042,<br />

28 "FreeX‐Leser", "#FFEE00");<br />

29 <br />

30 return layer;<br />

31 }<br />

108 Ausgabe 06-2012 Admin www.admin-magazin.de

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!