Workshop Eigene Karten mit Mapstraction erstellen
© Internet Magazin
Das Javascript-Framework Mapstraction bietet Ihnen eine Standardschnittstelle, die mehrere Bibliotheken für Kartendienste zusammenfasst. Neben Google Maps sind auch die Kartendienste von Yahoo, Microsoft, Open Steet Map, Open Layers und Cloud Map enthalten.
Damit müssen Sie sich zu Beginn der Entwicklung noch keine Gedanken machen, welchen Dienst Sie für diese Aufgabe nutzen. Ein Wechsel ist stets möglich - so können Sie beispielsweise schnell auf Änderungen der Lizenzbedingungen oder einen verbesserten Funktionsumfang eines Alternativanbieters reagieren und umstellen.
Mapstraction bietet Ihnen noch eine Reihe von zusätzlichen Funktionen, die auf der Standardschnittstelle aufsetzen. Besonders zu erwähnen sind an dieser Stelle die verschiedenen Marker, die Image Overlays und auch die Umkreismarkierungen, welche zusätzlich bekannte lokale Punkte mit in die Übersicht einbezieht. Das Framework wird als Open Source vertrieben und kann an Ihre eigenen Anforderungen angepasst werden.
Schritt 1: Laden Sie Mapstraction runter
Die aktuelle Version 2 des Frameworks gibt es auf der Website auf Github. In einem ersten Beispiel soll klassisch ein Kartenausschnitt dargestellt werden. Zusätzlich dazu benötigen Sie noch die Javascript-Bibliothek des Kartenanbieters.
Sie kapseln zwar die Schnittstelle, diese wird jedoch vom Mapstraction-Framework verwendet und setzt damit auch die Bibliothek des Anbieters voraus. Damit binden Sie vor dem Start immer zwei Bibliotheken - am besten über den Header Ihrer Website - ein.
Für die Einbindung der Mapstraction-Bibliothek und die anschließende Darstellung des Kartenmaterials benötigen Sie eine minimale Struktur. Das folgende Beispiel stellt die dafür notwendigen Elemente dar.
Schritt 2: Arbeiten Sie mit Koordinaten
Das folgende Beispiel bildet einen Kartenausschnitt ab, in dem die Allianz-Arena in München als zentraler Punkt steht. Die entsprechenden Koordinaten bekommen Sie beispielsweise auf der Website von Sven Soltmann. Dieser ermittelt auf Basis von Google Maps die Koordinaten zu beliebigen Orten. Anschließend können Sie mit diesen Informationen Ihre erste Karte zeichnen lassen.
Im Beispiel wird ein div-Bereich mit dem Namen map_canvas für die Darstellung der Karte definiert. Dieser Abschnitt bekommt aus Gründen der Einfachheit direkt in der div-Beschreibung die Höhe von 400 Pixel zugewiesen. Dies können Sie natürlich auch über eine separate Style-Definition abbilden.
© Internet Magazin
Schritt 3: Geben Sie den Längen- und Breitengrad des Ortes an
Diese Daten reichen bereits für die Darstellung der Karte aus. Wenn Sie das Skript mit diesen Daten starten, sehen Sie jedoch unter Umständen nicht den gewünschten Effekt und der Ort wird nicht optimal innerhalb des Kartenausschnitts dargestellt.
Sie können nun mit der nächsten Methode setCenterAndZoom() entsprechend optimieren. Die Zentrierung erfolgt automatisch, der numerische Wert definiert den Zoomfaktor des Ausschnitts. Damit haben Sie Ihren ersten Kartenausschnitt definiert.
Schritt 4: Kennzeichen Sie den dargestellten Ort
Bei dieser Darstellung ist es noch nicht klar ersichtlich, wo sich der Punkt genau befindet, den Sie auf der Karte anzeigen möchten. Aus diesem Grund bietet es sich an, im nächsten Schritt den Ort mit einem Marker zu kennzeichnen, den Sie hervorheben möchten.
Im Baukasten finden Sie mehrere Methoden zur Darstellung eines Markers. In der einfachsten Form legen Sie eine neue Markierung über die Methode addMarker() an, welche lediglich die Koordinaten des Punktes enthält. Das folgende Beispiel setzt dies auf Basis des Kartenmaterials von Google um.
In diesem Beispiel sehen Sie jedoch nur eine einfache Markierung, die Sie optisch nicht beeinflussen können. Dazu gibt es eine zweite Methode addMarkerWithData(), welche die Übergabe von zusätzlichen Eigenschaften zur Darstellung erlaubt.
Der Baukasten besitzt die Möglichkeit, verschiedene Symbole und Schatten einzubinden und diese entsprechend zu skalieren und zu positionieren. Aus Gründen der Performance sollten Sie jedoch die Grafiken anders als in dem Beispiel auf Ihrem Server speichern. Damit verkürzen Sie die Ladezeit entsprechend. Eine komplette Übersicht aller zur Verfügung stehenden Parameter und deren Ausprägung finden Sie online in der Schnittstellendokumentation von Mapstraction .
Schritt 5: Verwenden Sie zusätzliche Steuerelemente
© Internet Magazin
Zusätzlich ist auch die Darstellung des Kartenmaterials entsprechend wählbar: Neben der Präsentation des Ausschnitts als klassische Karte verfügen die meisten Kartendienstleister auch noch über die entsprechenden Satellitenbilder und teilweise auch Geländekarten.
Mapstraction bietet Ihnen für diesen Fall die Methode addControls an, die insgesamt fünf Parameter besitzt:
- pan aktiviert das Steuerkreuz sowie den Slider für den Zoomfaktor.
- zoom bietet zwei Optionen - small und large - und gibt somit die Länge des Sliders zum Einstellen des Zoomfaktors des Ausschnitts an.
- overview bietet Ihnen zur besseren Übersicht noch eine Übersichtskarte, welche den Ausschnitt markiert, der angezeigt werden soll.
- scale zeigt Ihnen den Skalierungsfaktor an, mit dem ein Maßstab der Karte eingeblendet wird.
- Map_type schließlich bietet die Option, zwischen den verschiedenen Darstellungsformen der Karte umzuschalten. Bei Google sind dies beispielsweise Karte, Satellit und Hybrid.
Bis auf den Wert zoom sind alle anderen Werte boolsche Variablen. Die Standardeinstellung ist immer false, daher müssen Sie einen Wert explizit angeben und mit true versehen, den Sie aktivieren möchten.
Schritt 6: Fügen Sie Events hinzu
Die API erlaubt nicht nur die Darstellung von Kartenmaterial, sondern darüber hinaus auch die Verarbeitung von auftretenden Ereignissen.
In der Beschreibung der Schnittstelle finden Sie einen Abschnitt Event Summary, in dem die zur Verfügung stehenden Ereignisse ein wenig ausführlicher beschrieben werden.
Das folgende Listing-Beispiel reagiert hier auf das Anklicken des Kartenausschnitts, die Anpassung des Zoom-Faktors sowie das Verschieben des Kartenausschnitts.
Das Skript verarbeitet das Klickereignis und stellt einen passenden Handler dafür zur Verfügung. Der Programmcode erstellt an der Stelle des Klickereignisses eine Markierung versieht diese im Textfeld mit dem Längen- und dem Breitengrad des Punktes. Die Information geben Sie über die Methode setInfo Bubble() aus.
Wenn Sie den Zoomfaktor anpassen, wird dieser zum einen automatisch durch die Kartenanwendung geändert. Parallel dazu geben Sie mit Hilfe des Programmcodes noch eine Popup-Nachricht mit dem Inhalt "Sie haben den Zoomfaktor angepasst" aus.
Den gleichen Aufbau hat der Handler für das Verschieben des Kartenausschnitts. Auch in diesem Fall wird eine Nachricht ausgegeben, jedoch mit abweichendem Inhalt.
Schritt 7: Arbeiten Sie mit Filtern
Mapstraction unterstützt auch den Einsatz von Filtern. Im Beispiel zeigen wir Ihnen, wie Sie alle Punkte innerhalb eines gewissen Radius um einen Punkt herum markieren. Das Beispiel setzt nur den Mittelpunkt der Suche, alle weiteren Punkte werden im Skript nicht gesetzt oder ermittelt - es ist jedoch der Platzhalter addMarker() dafür vorgesehen.
Innerhalb der Funktion zur Initialisierung des Beispiels wird wieder die Allianz-Arena als Mittelpunkt herangezogen und ein Radius um diesen Punkt gezogen. Nach der Zeile, in welcher Sie mit centerRadius den initialen Startumkreis definieren, haben Sie einen Kartenausschnitt mit dem Fußballstadion in der Mitte und einen Kreis mit einem entsprechend definierten Umgebungsradius.
Die Funktion addMarker() dient, wie bereits erwähnt, als Platzhalter für das Zusammensammeln der Punkte, die sich in der Umgebung der Markierung befinden.
In den beiden letzten Schritten wird in der Titelzeile ein Slider angelegt, mit dem Sie den Suchradius vergrößern oder verkleinern können.
Wenn Sie einen Slider anlegen, geben Sie diesem eine Reihe von Startparametern mit:
- range legt den Wertebereich des Sliders fest - im Beispiel den Bereich von 0 bis 5,
- step gibt die Schrittweite an,
- sliderValue legt den Startwert fest,
- onChange und onSlide sind zwei Optionen, mit denen Sie Folgeverarbeitungen definieren, in beiden Fällen den Aufruf der Funktion sliderChanged.
Die Verarbeitung der Veränderung des Schiebereglers findet somit innerhalb der Funktion sliderChanged() statt. Ziel ist es, den Radius um den definierten Punkt mit dem Wert des Sliders gleichzusetzen und eventuell enthaltene Markierungen anzuzeigen.
Dabei werden im ersten Schritt der vorhandene Kreis und die vorhandenen Filter gelöscht. Mit Hilfe von addPolyline ziehen Sie anschließend einen neuen Kreis um die Markierung mit dem auf dem Schieberegler eingestellten Wert und versehen diesen mit der entsprechenden Farbe.
Anschließend fügen Sie noch einen Filter distance ein und verknüpfen diesen ebenfalls mit dem Wert des Schiebereglers. Damit wären Sie streng genommen fertig. Im letzten Schritt wird jedoch noch die Anzahl der Markierungen, die sich innerhalb des neuen Suchradius befinden, ermittelt und ausgegeben.
Fazit
Mapstraction erlaubt Ihnen eine flexible Entwicklung im Umfeld der Kartenanbieter. Dank der Kapselung der Funktionen lässt sich der Kartenanbieter mit geringfügigen Änderungen austauschen. Sollten Sie aktuell in der Auswahlphase sein, welches Kartenmaterial Sie auf Ihre Website einbinden, bietet das Framework eine interessante Alternative.
Lediglich die Dokumentation lässt einige Wünsche offen. An dieser Stelle springt jedoch in der Regel die Sandbox mit ihren Beispielen ein und unterstützt beim Verständnis der Schnittstelle.