Nützliche Skripte für die Google Maps API

Möglicherweise erinnern Sie sich an die SimpleMarker Klasse, die ich vor etwa einem Jahr geschrieben habe. Vor kurzem habe ich wieder einige Zeit mit der Google Maps API verbracht, da ich eine Chrome Erweiterung für Google+ entwickle, mit der man seine Kontakte auf einer Karte darstellen kann. Während der Entwicklung habe ich festgestellt, dass ein Update der Marker-Klasse seit langem überfällig ist. Jetzt nicht mehr ;-)

Bei der Entwicklung der Erweiterung sind außerdem noch weitere Skripte entstanden, die ich gesondert veröffentlichen möchte. Anstatt Sie hier über die Homepage zu verteilen, habe ich alle in einem einzigen GitHub Repository zusammengefasst. Auf diese Weise können Sie auch sehr einfach Fehler melden, Wünsche äußern oder sogar selber am Code mitarbeiten. Die Skripte stehen unter der Apache Lizenz (Version 2), dass heißt Sie klnnen die angebotenen Dateien komplett kostenlos auf praktisch jede Weise nutzen. Hier ist der Link zum Repository:

Google Maps API Addons auf GitHub

In diesem Artikel möchte ich Ihnen einen kleinen Überblick über die momentan enthaltenen Skripte geben.

SimpleMarker

Da ich mehrere Anwendungen geschrieben habe, die eine hohe Anzahl von Markern gleichzeitig anzeigen müssen, habe ich die SimpleMarker Klasse entworfen. Dabei handelt es sich um einen Marker mit minimalem Speicherbedarf, der trotzdem alle wichtigen Funktionen eines Markers bereitstellt (und sogar ein bisschen mehr).

In der neusten Version der Klasse habe ich die Schnittstelle sehr stark verändert, um sie an die Schnittstelle der offiziellen google.maps.Marker Klasse anzugleichen. Sollten Sie meine Marker Klasse bereits benutzen, beachten Sie bitte, dass ein einfaches Austauschen der Dateien nicht ausreicht. In diesem Fall müssen Sie auch einige Stellen in Ihrem Code anpassen, damit keine Fehler auftreten.

Dank diesen Änderungen sollte die Klasse allerdings nun auch zu den meisten Erweiterungen wie MarkerManager oder MarkerClusterer kompatibel sein. Sollte dies nicht der Fall sein, erstellen Sie bitte einen Fehlerbericht im GitHub Repository.

DayNightOverlay

Wie der Name vielleicht schon vermuten lässt, handelt es sich beim DayNightOverlay um ein Overlay, welches anzeigt, wo die Tag-Nacht-Linie auf der Erde verläuft und wo es aktuell Nacht ist. Das Overlay ist sehr leicht anpassbar, so kann z.B. die Farbe des "Nacht"-Bereiches mit einem Parameter angepasst oder das Datum variiert werden.

Zunächst dachte ich, solch eine Erweiterung zu erstellen sei extrem einfach und es würde eine simple Sinuskurve ausreichen, die je nach Uhrzeit horizontal versetzt angezeigt wird. Leider stellte sich heraus, dass die Annahme falsch ist. Vor allem um die Tag-Nacht-Gleichen herum hat die Tag-Nacht-Linie praktisch gar nichts mehr mit einem Sinus zu tun, sondern entspricht eher einem Rechteck.

Zum Glück bin ich dann auf geoastro.de gestoßen. Hierbei handelt es sich um eine Seite, die sich intensiv mit dem Thema beschäftigt und glücklicherweise alle benötigten Formeln bereitstellt. Damit konnte ich mein Overlay korrekt implementieren und habe nun eine Klasse, die sehr präzise Tag-Nacht-Linien zeichnet.

FeatureControl

Um dem Benutzer einen konsistenten Weg anzubieten, einzelne Google Maps Erweiterungen an- und abzuschalten, habe ich ein einfaches aber trotzdem erweiterbares Bedienelement programmiert, welches sowohl optisch als auch von der Funktionsweise her den Standard-Bedienelementen der Google Maps Oberfläche gleicht und neben ihnen platziert werden kann.

Das Skript dazu besteht aus zwei Teilen. Zum einen besteht es aus dem eigentlichen Bedienelement, welches sich um die Anzeige und die Interaktion mit dem Benutzer kümmert. Zum anderen habe ich eine abstrakte Feature Klasse geschrieben, von der Ihre Erweiterungen erben müssen. Dann müssen Sie nur noch zwei Eventhandler implementieren (onEnable und onDisable) und Ihre Erweiterung ist bereit für das Bedienelement.

Bitte beachten Sie, dass FeatureControl noch nicht im obigen Repository verfügbar ist. Ich bin momentan dabei, das Skript an einigen Stellen umzuschreiben, da es momentan noch ein paar Abhängigkeiten an die Applikation besitzt, für die ich das Bedienelement ursprünglich entwickelt habe.