BLOG

OpenLayers Workshop

Das ist das Ziel:


Eine Karte mit mehreren Layern zum An- und Ausschalten.

Benötigte Module:
  • openlayers    für die Ausgabe (zB mit Views)
  • openlayers_geocoder  6.x-2.x-dev  sehr praktisches Eingabe-Widget
  • token    seltsamerweise nicht erforderlich, aber von openlayers_geocoder benötigt

Der geocoder hat einen kleinen Bug, der beim Administrieren einen Fehler auswirft. Bitte ignorieren - es ist harmlos.

Beispiel

Ich will eine Karte meiner liebsten Pizzerien, wobei Restaurants, wo man draußen sitzen kann, anders gekennzeichnet sein sollen.
Mein total lebendiges Beispiel zeigt: ja, das ist hier höchst didaktisch angelegt: wir erfeuen uns erstmal an einer einfachen Mapansicht, dann basteln wir eine Multi-Layer-Map.

1a. Nodetyp restaurant anlegen mit diesen 4 Feldern:

1b. Das Feld für die Geolocation erzeugen

WKT steht für "well-known-text" - eine Längen/Breitenangabe.

Hier unter Autocompletion dies einstellen:

PS: Ein Klick auf Replacement Pattern zeigt weitere [token].

Schnell das Feld noch nach oben schieben:

 

2a. Ersten Node anlegen:  /node/add/restaurant

hinter der Search address verbirgt sich ein chickes Ajax-Feld:

Dank der eingestellten Autocompletion werden die anderen Adressfelder automatisch ausgefüllt:


Wir sind neugierig und klicken auf Show WKT field:

WKT - Well known text (!) Klar :-)
Auf jeden Fall sind die Daten jetzt korrekt und sinnvoll erfasst - dank openlayers_geocoder.

2b. Weitere drei Nodes anlegen, davon auch welche mit Terasse !

Die Mühe muss man sich machen - sonst gibts nachher nix zu sehen !

3a. Nodeausgabe mit Map

Da muss man gar nichts tun. Das funktioniert sofort.

3b. Ausgabe als CCK-Feld:

Wäre dann genauso einfach: In einer View das Feld field_wkt_address mit Default Map wählen:



Hier tauchen auch alle später angelegten openlayers-presets auf.  Unserer wird "restaurants" heißen.

4. Map-Preset ändern

Die openlayers-presets. Ändern geht nicht - nur klonen und ändern: admin/build/openlayers/presets
Ich möchte ein Preset haben, dass 200px hoch ist, kleine Navigation und einen guten Startzoomwert hat:

Klick bei Default Map auf Duplizieren
General Information
- Name: minimap
- Höhe: 200px
Center & Bounds
- Zoom-Level: 6
Behaviours
- PanZoom statt PanZoomBar
- Layer Switcher aus

Jetzt sollte die Karte anders aussehen...

Die Multi-Layer-Map

Konzept in openlayers: Alles sind Layers.

  • Die Karten selbst sind die Base Layers.
  • Alles, was draufgemalt wird, sind die Overlay Layers. Das können außer Treffern (zB unsere Restaurants) auch Regionen oder Striche(?) sein.


Grobes Vorgehen:

  • Für jede Treffergruppe muss eine View (oder Ableitung) erzeugt werden mit "Typ" OpenLayers Data. In unserem Fall zwei: eine für Restaurants mit und eine ohne Terasse.
  • In einem (neuen) OpenLayers-Preset diese jetzt erschienenen Overlay Layers aktivieren
  • In einer weiteren View (oder Ableitung) mit "Design" (nicht Typ!) OpenLayers Map dieses Preset als Ausgabe wählen
  • Voilà !

1. View "restaurants" mit zwei Layern (mit/ohne Terasse)

So sollte es aussehen:

  1. Typ ist nicht attachment oder block, sondern OpenLayers Data
  2. Design muss ebenfalls OpenLayers Data sein (was anderes gibts auch nicht)
  3. Die Einstellung verlangt nach einem Adressfeld - erstmal anlegen
  4. Unser field_wkt_address mit Format WKT Value und (später interessant) den Node-Titel anlegen
  5. Data Sources so einstellen:



Eine weitere OpenLayers Data Ableitung für Restaurants ohne Terasse anlegen (Filter: Inhalt Terasse = 0) und
speichern !!!

2. OpenLayers Preset "Default Map" duplizieren und ändern:

General Information:
- Name: Restaurants
Center & Bounds:
- Sinnvollen Ausschnitt wählen
Behaviours:
- Layer Switcher aktivieren !!!
Mayers & Styles:
- beide Overlay layers aktivieren (Checkbox 1 und 2)

3. Diese Map jetzt durch eine View ausgeben

Neue Ansicht/Ableitung vom Type Seite erzeugen (dürfte auch Block/PanelPane sein) und als Design OpenLayers Map wählen:
Map-Preset Restaurant als Ausgabe festlegen:
Pfad einstellen (zB "restaurants")
Speichern und testen !

4. Unterschiedliche Styles für die Layer definieren

In OpenLayers Styles den Basic default style duplizieren und ändern:
- Name/Titel: Rote Kringel
- pointRadius: 8
speichern

Diesen neuen Style duplizieren und ändern:
- Name/Titel: Grüne Kringel
- fillColor: #33dd33
- strokeColor: #11aa11
speichern

5. Styles zuweisen

Im Restaurant-Preset die  Layers & Styles so einstellen:

  • Aktiviert (Enabled) bedeutet: Layer ist Teil der Map
  • Activated: Layer wird angezeigt
  • In Switcher: Layer kan an/ausgeschaltet werden

Speichern und Testen - man sollte diesen Switcher sehen:


Der Switcher stellt als Layer-Titel die Titel der Restaurant-Views dar:

  1. Titel "mit Terasse" und "ohne Terasse" angeben.
    Eigentlich sollte das reichen, aber bei mir hats immer noch nicht funktioniert.
  2. Quirk: die Standard-Ansicht der View muss irgendeinen Namen bekommen - dann ging es wenigstens bei mir...

 

Jetzt sollte das Ergebnis aussehen wie die Karte oben im Beitrag.

Weiterführende Blogbeiträge

 

Vielen Dank für die Aufmerksamkeit !

OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop
OpenLayers Workshop

Kommentare

Pingback

[...] Beitrag bezieht sich auf den OpenLayers Workshop.Einen direkten Link auf die openLayers-Icons bzw. Symbole konnte ich nicht legen, dafür kann man [...]

*Daumenhoch

Ich kann mich Anja nur anschließen: toller Beitrag! Ich bin vor ein paar Wochen schon mal ziemlich doll an OpenLayers verzweifelt. Jetzt, nach diesem Workshop, werde ich das nochmal angehen, danke! ;)

Und jetzt noch ein Feature

Und jetzt noch ein Feature mit (zur Not auch ohne) make file für die ganz Faulen anhängen :)
Aber im Ernst: Danke für den Beitrag, mit Open Layers kann man unheimlich tolle Sachen machen und du verbreitest die Frohe Botschaft sehr unterhaltsam :)

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Mit dem Absenden dieses Formulars, akzeptieren Sie die Datenschutzrichtlinie von Mollom.