Advertisement
  1. Code
  2. Web Development

Turn-By-Turn-Anweisungen mit der Google Maps-API

Scroll to top
Read Time: 15 min

German (Deutsch) translation by Federicco Ancie (you can also view the original English article)

In diesem Tutorial werden wir den Prozess des Erstellens eines kleinen Widgets durchlaufen, mit dem Benutzer Abbiegehinweise zu einem bestimmten Ort abrufen können. Wir werden die Google Maps-API über JavaScript verwenden, um diese ziemlich erweiterte Funktionalität bereitzustellen.

Final ProductFinal ProductFinal Product

Einen API-Schlüssel erhalten

Die einzige Einschränkung bei der Verwendung von Google Maps besteht darin, dass wir einen API-Schlüssel beantragen müssen. Das ist jedoch ein ziemlich trivialer Vorgang, wenn Sie schon über ein Google/GMail-Konto verfügen. Leider müssen wir aufgrund der Anforderungen von Google auf der Domain entwickeln, die wir Google zur Verfügung stellen, d. h. wir können nicht auf einem lokalen Server entwickeln. Zum Glück wird der Prozess schnell sein und wir werden nicht viel Zeit auf dem Live-Server verbringen. Stellen Sie außerdem sicher, dass Sie Ihren API-Schlüssel an einem sicheren Ort aufbewahren, da ich keine Möglichkeit finden konnte, sie nach der Generierung abzurufen, obwohl Sie wahrscheinlich nur einen neu erstellen könnten.

Der Staat der Affären

Bevor wir uns mit Code befassen, möchte ich den Grund für diese Idee diskutieren. Wie die meisten Entwickler verbringe ich viel Zeit im Web. Eine bestimmte Untergruppe von Websites, die ich besuche, sind lokale Unternehmen, die sicherlich keine großen Ressourcen für das Webdesign haben, aber hoffentlich werden die Leute, die diese Websites entwickeln, Artikel wie diesen sehen und erkennen, wie einfach es ist, ein voll funktionsfähiges zu integrieren Karte in eine beliebige Webseite. Fast jede Website, die ein kleines Unternehmen repräsentiert, verfügt über eine Seite, auf der Benutzer erfahren, wie sie ihren physischen Standort finden können. Oft erhalten Sie eine Karte mit ihrem Standort, was Benutzern, die das Gebiet nicht kennen, nicht hilft. In diesem Tutorial werden wir das ändern und den Benutzern erlauben, ihre Adresse einzugeben und eine Wegbeschreibung zu jeder gewünschten Adresse zu erhalten.

Einschließlich der Google Maps Javascript Library

Jetzt, da die Seifenkiste nicht mehr im Weg ist, können wir uns den Code ansehen. Als erstes müssen wir die Javascript-Bibliothek einbinden, die alle Google Maps-Methoden enthält. Google hat diesen Code wahrscheinlich generiert, als Sie Ihren API-Schlüssel erstellt haben. Dies hat jedoch möglicherweise auf die API der Version 3 hingewiesen, die sich noch im Beta-Test befindet. Hier ist der Link zur API-Version 2. Stellen Sie sicher, dass Sie Ihren API-Schlüssel einfügen. Wir werden auch eine Datei einfügen, application.js, die unsere benutzerdefinierten Funktionen enthält. Ich habe meine in einem Verzeichnis auf der Stammebene namens js gespeichert. Der folgende Code befindet sich im Kopfbereich Ihrer Seite.

Der HTML-Code

Im Hauptteil unserer Seite benötigen wir ein begrenztes Markup. Ich werde kurz auf die erforderlichen Bits eingehen, und Sie können sich den Quellcode ansehen, um die Flusen zu sehen, die ich in meine Demo aufgenommen habe. Das erste Element ist ein leeres Div mit der ID map_canvas. Dies ist der Platzhalter, auf den wir die Google Maps-Aufrufe verweisen, und es werden alle Karten-Markups in diesem Element generiert.

Als nächstes habe ich ein div erstellt, das die Organisationsadresse und das Formular enthält, in das der Benutzer seine Adresse eingeben kann. Sie können sich diesen Code ansehen, aber er ist ziemlich einfach und nicht sehr schwer zu erkennen, ob er erfüllt ist. Schauen Sie sich unbedingt mein CSS an, um zu sehen, wie es in meiner Demo gestaltet ist.

Beachten Sie, dass wir diese Seite an sich selbst senden, damit wir die Seite mit PHP verarbeiten können, wenn der Benutzer JS deaktiviert hat. Wenn sie JS aktiviert haben, möchten wir eine Funktion, overlayDirections(), ausführen, die wir uns etwas später ansehen werden. Der Großteil dieses Codes geht in das Auswahlfeld, in dem der Benutzer seinen Status auswählen kann. Ich habe ihn für diejenigen, die diesen Artikel drucken, komprimiert, aber Sie können den vollständigen Code aus dem Download abrufen. Weitere interessante Hinweise sind, dass wir die size und die maxlength des Postleitzahlentextfelds auf 5 setzen. Als letztes müssen wir beachten, dass wir allen Formularelementen IDs und Namen zugewiesen haben.

Bootstrapping und Deklarieren von Variablen

Okay, jetzt können wir uns dem Fleisch dieses Tutorials widmen, dem JavaScript-Code. Fast alle Anrufe, die wir tätigen werden, stammen von der Google Maps-API, auf die wir zuvor verwiesen haben. Google bietet auf seiner Website eine hervorragende Dokumentation und Beispielcode. Schauen Sie sich diese also unbedingt an. Ich werde versuchen, auf relevante Seiten zu verlinken, wenn ich sie benutze.

Das erste ist, während wir unsere HTML-Seite geöffnet haben, können wir die Initialisierungsfunktion durch Festlegen des onload-Attributs booten. Hinweis: Dies kann in jQuery mit der Funktion $(document).ready() erfolgen.

Jetzt werden wir in die Datei js/appication.js wechseln. Als erstes müssen wir einige Variablen setzen. Einige Code-Evangelisten werden mich wahrscheinlich wegen der Deklaration globaler Variablen jagen, aber ich glaube, in diesem Fall sollten wir in Ordnung sein. Ich gebe Ihnen den Code und erkläre dann, wie wir jeden einzelnen verwenden werden.

  • gdir: Enthält das GDirections-Objekt, mit dem die Ergebnisse der Wegbeschreibungen abgerufen und auf einer Karte und / oder einem Textfeld angezeigt werden.
  • fromAddress: Eine Zeichenfolge, die die vollständige Adresse des Benutzers enthält.
  • toAddress: Eine Zeichenfolge, die die Geschäfts- / Organisationsadresse enthält

Die Funktion initialize()

Die zuvor aufgerufene Funktion initialize() wird verwendet, um die Karte auf der Seite zu erstellen und eine benutzerdefinierte Markierung für unseren Standort zu platzieren.

Als erstes müssen wir überprüfen, ob der Browser mit Google Maps kompatibel ist. Dazu stellt Google GBrowserIsCompatible() in der API zur Verfügung. Im Wesentlichen gibt es true zurück, wenn der Browser kompatibel ist und wir den Rest unserer Funktion ausführen können. Ich habe beschlossen, einige der Werte in Variablen am oberen Rand der Funktion zu abstrahieren, damit diese problemlos auf viele Anwendungen portiert werden können.

Das companyMarkerImage ist eine Zeichenfolge der Position eines kleinen Bildes, das wir an unserer Position auf der Karte platzieren. Dies ist meiner Meinung nach eine nette Geste, wenn Sie ein benutzerdefiniertes Symbol für Ihr Unternehmen haben, mit dem die allgemeine Google Map-Ansicht personalisiert wird. Als nächstes enthält companyLatLng ein GLatLng-Objekt, das einem Längen- und Breitengradpunkt in der Welt entspricht. Gehen Sie nicht aus und kaufen Sie ein GPS-Gerät, um diese Nummern zu erhalten. Wir können maps.google.com verwenden. Geben Sie im Suchfeld Ihre Adresse ein und klicken Sie oben rechts auf der Karte auf die Schaltfläche Link, wenn der Ort gefunden wurde. Scrollen Sie durch das erste Textfeld im modalen Fenster und suchen Sie &sll=....

Sie können diese Koordinaten kopieren und in die Parameter unseres GLatLng-Konstruktors einfügen. Dies ist der Punkt auf der Karte, an dem wir unser benutzerdefiniertes Bild platzieren. Die nächste Variable, companyMarkerSize, enthält ein GSize-Objekt, das die Breite und Höhe Ihres benutzerdefinierten Markierungsbilds darstellt. Als nächstes setzen wir toAddress, die die Adresse des Geschäfts ist. Die letzte Variable, defaultZoomLevel, teilt der Karte lediglich mit, wie hoch die Standardzoomstufe zwischen 1 und 18 sein soll.

In der nächsten Codezeile wird ein GMap2-Objekt erstellt. Google beschreibt dies als "die zentrale Klasse in der API". Dies lädt die Kartendaten und ermöglicht es uns, die im Kartenbereich angezeigten Daten zu bearbeiten. Ein DOM-Objekt, das auf das Element zeigt, das die Karte enthält, #map_canvas, benötigt ein Argument. Als nächstes setzen wir gdir so, dass es das GDirections-Objekt enthält. Dies ist die Schnittstelle, über die wir Google Maps nach Wegbeschreibungen abfragen. Der Konstruktor verwendet zwei Argumente, ein Kartenobjekt und ein DOM-Objekt, in die die Turn-by-Turn-Richtungen eingefügt werden sollen. Ich beschließe, ein leeres Div unter #addresses mit dem Namen #directions zu erstellen.

Bei der Nutzung von Webdiensten besteht immer das Risiko, dass ein Fehler zurückgegeben wird. Mit der GEvent-Klasse können wir dies so schmerzfrei wie möglich gestalten. In diesem Codebit sagen wir, dass wenn wir einen Fehler beim Abrufen der Anweisungen zum Ausführen einer benutzerdefinierten Rückruffunktion haben, in unserem Fall handleErrors. Wir rufen direkt die Funktion addListener() auf, die einen Rückruf registriert. Es werden 3 Argumente für ein Quellobjekt, eine Zeichenfolge, die sich auf den Ereignistyp bezieht, für den der Rückruf ausgeführt werden soll, und ein Handler benötigt, der auf eine Funktion verweist, die ausgeführt werden soll. Die Funktion handleErrors werden wir uns später ansehen.

Die letzten Zeilen in initialize() werden verwendet, um unseren benutzerdefinierten Marker zu erstellen. Ich habe einen Jayhawk ausgewählt, der auf der KU-Homepage zu finden ist. createMarker ist eine Wrapper-Funktion, die ich geschrieben habe, um den Code zu abstrahieren, der zum Erstellen eines benutzerdefinierten Markers erforderlich ist. Es werden drei Argumente benötigt: ein Verweis auf ein GLatLng-Objekt, auf dem das Bild platziert werden soll, eine Zeichenfolge, die den Pfad zu einem Bild darstellt, und ein Verweis auf ein GSize-Objekt, das die Größe des Bildes darstellt. Als nächstes verwenden wir die setCenter()-Methode der GMap2-Klasse, die zwei Argumente, ein GLatLng-Objekt der Koordinaten, auf die zentriert werden soll, und eine Ganzzahl für die Zoomstufe verwendet. Beachten Sie, dass wir die Variablen übergeben, die wir im Einstellungsblock oben in der Funktion initialize() festgelegt haben. Die letzte Codezeile verwendet die Methode addOverlay(). Dies ist es, was das benutzerdefinierte Bild tatsächlich zur Karte hinzufügt.

Die Funktion initialize() hebt viel, aber sie kann es auf jeden Fall zeigen. Nachdem wir als nächstes die Funktion createMarker() geschrieben haben, können Sie die Anwendung laden und einige Fortschritte sehen. Aber lassen Sie uns zuerst die Funktion initialize() rekapitulieren.

Die Funktion createMarker()

Als Nächstes erstellen wir eine Wrapper-Funktion, die das Erstellen eines Markers mit einem benutzerdefinierten Bild vereinfacht. Der Grund, warum ich mich dazu entscheide, dies zu abstrahieren, ist, dass es ein komplizierter Prozess ist und unsere initialize()-Funktion noch mehr überladen würde. Ein weiterer zusätzlicher Vorteil ist, dass wir sehr schnell mehrere Marker hinzufügen können, ohne viel Code zu wiederholen.

Deutlich kleiner als unsere erste Funktion, aber genauso wichtig. Zuerst deklarieren wir eine neue Variable, einen Marker und speichern ein GIcon-Objekt. Es kann zwei Argumente kopieren, bei denen es sich um ein GIcon-Objekt handelt, von dem Eigenschaften kopiert werden, und image, bei dem es sich um eine Zeichenfolge handelt, die einen Pfad zu einem benutzerdefinierten Image darstellt. G_DEFAULT_ICON ist eine Konstante, die eine Standardmarkierung darstellt, und die imageURL stammt aus dem Einstellungsblock in initialize(). Wir müssen nur noch eine Eigenschaft festlegen, iconSize vom Typ GSize. Dies entspricht der Größe unseres benutzerdefinierten Bildes und stammt ebenfalls aus dem Einstellungsblock. Die letzte Codezeile gibt ein GMarker-Objekt zurück, das zwei Argumente latlng und icon verwendet. Das erste, latlng, ist ein Verweis auf das GLatLng-Objekt, das wir im Einstellungsblock deklariert haben. Das nächste Argument bezieht sich auf das gerade erstellte GIcon-Objekt. Das ist alles, was wir tun müssen, damit der Kartenteil unserer Anwendung funktioniert. Sie können jetzt die Seite laden und sehen, wie einfach es ist, eine schöne Karte auf unserer Website zu erhalten.

Anweisungen hinzufügen

Dies ist bei weitem mein Lieblingsteil dieses Tutorials, bei dem Benutzer eine Adresse eingeben und eine Karte mit hervorgehobener Route und Abbiegehinweisen zurückerhalten können. Durch die Verwendung dieser API können wir etwas, das Tausende von Codezeilen und eine unglaubliche Menge an Verarbeitungsressourcen erfordert, auf nur eine Handvoll Code komprimieren.

Die erste Zeile habe ich aus Gründen der Übersichtlichkeit tatsächlich in fünf Zeilen erweitert. Im Wesentlichen werden dadurch alle Werte aus dem Formular erfasst und ein Leerzeichen zwischen den einzelnen Teilen eingefügt. Ich dachte, dies wäre besser, als den Benutzer zu bitten, die gesamte Adresse in ein einziges Textfeld einzugeben, da dies verwirrend werden kann.

Die zweite Zeile verwendet das in initialize() festgelegte gdir. Wir rufen die load()-Methode auf und übergeben ein einzelnes String-Argument. Dies ist im Wesentlichen das, was wir maps.google.com über das Suchfeld übergeben würden. Mithilfe der Schlüsselwörter from: und to: können Sie Google mitteilen, welche Adresse der Startpunkt und welche der Endpunkt sein muss. Das ist alles, was wir für eine Wegbeschreibung tun müssen. Ja, ich war auch schockiert! Wenn Sie Ihre Seite erneut besuchen, können Sie dies in Aktion sehen.

Fehler behandeln

Als nächstes deklarieren wir die Funktion handleErrors(). Ich habe dies aus dem Google-Beispielcode auf der API-Website übernommen. Ich werde nicht ins Detail gehen, weil es ziemlich einfach ist.

Es gibt eine lange if... elseif... else-Anweisung, die nach vielen Fehlertypen sucht und den Benutzer benachrichtigt, wenn welche auftreten. Sie können dies ändern, wenn Sie die Warnung weniger technisch gestalten möchten.

Abbaubar

Als gute Webentwickler sollten wir sicherstellen, dass unsere Website für so viele Benutzer wie möglich funktioniert, auch für Benutzer mit deaktiviertem JavaScript. In dieser Situation habe ich mich dafür entschieden, diejenigen mit deaktiviertem JS mit der durchgeführten Suche zu Google Maps umzuleiten, damit sie weiterhin eine Wegbeschreibung erhalten. Dies erfolgt mit PHP, um das Formular auszuwerten und zu Google Maps umzuleiten. Fügen Sie oben auf Ihrer HTML-Seite diesen Code ein:

Zuerst haben wir wieder einen Einstellungsblock, der nur eine Variable zum Setzen hat, $TO. Dies ähnelt dem, was wir in JavaScript für toAddress getan haben, aber wir benötigen dieselbe Zeichenfolge auch in PHP. Als nächstes haben wir eine if-Anweisung, um nach POST-Daten zu suchen, was bedeutet, dass unser Formular gesendet wurde. Jetzt nehmen wir die Formularwerte und platzieren sie in einer Zeichenfolge mit Leerzeichen und speichern diese in einer Variablen, $FROM. Dann speichern wir den Sprachwert in $LOC, dazu später mehr. Die Variable $url enthält die Zeichenfolge, die die Abfrage-URL zu Google darstellt. Beachten Sie, dass wir unsere Werte per URL codieren, damit sie sicher auf der Umleitung übertragen werden. In der letzten Codezeile werden PHP-Header verwendet, um den Nutzer zu Google umzuleiten.

Optional: Mehrsprachige Unterstützung hinzufügen

Als Unternehmen möchten Sie so viele Menschen wie möglich erreichen. Ein Teil dieses Prozesses besteht darin, mehrere Sprachen zu unterstützen. In Google Maps fallen für uns die Unterstützung anderer Sprachen ohne zusätzliche Kosten an.

Öffnen Sie zuerst Ihre HTML-Seite und fügen Sie den folgenden Code zwischen Ihre Formular-Tags ein.

Wenn Sie Sprachen entfernen möchten, löschen Sie einfach das Options-Tag. Sie können die Standardeinstellung auch ändern, indem Sie das ausgewählte Attribut verschieben.

Wenn wir zu js/application.js wechseln, müssen wir nur zwei Änderungen vornehmen. Beginnen Sie mit der Funktion overlayDirections(), nachdem Sie die Zeichenfolge fromAddress erstellt haben. Fügen Sie diese hinzu, um den ausgewählten Wert aus dem Sprachauswahlfeld abzurufen und in unserer Sprachvariablen zu speichern.

Fügen Sie als Nächstes der Funktion gdir.load() ein Argument hinzu. Hierfür wird ein Optionssatz benötigt. In unserem Fall müssen wir nur das Gebietsschema deklarieren, damit es die richtige Sprache und die richtigen Einheiten für die Turn-by-Turn-Richtungen kennt.

Hinweis: Wir haben dies bereits in die PHP-Umleitung aufgenommen. Wenn Sie dies deaktivieren möchten, setzen Sie einfach $LOC statisch.

Abschluss

Das ist alles, was wir für diese erstaunliche Funktion benötigen, und ich hoffe, Sie haben auf diesem Weg etwas über Google Maps gelernt. Ich fordere Sie als Entwickler auf, weiterhin interessante Möglichkeiten zu finden, um Karten in Ihre Anwendungen zu integrieren. Immer wenn ein Modell ortsbezogen ist, sollten Sie sich fragen, ob Ihr Projekt für die visuelle Darstellung auf einer Karte verwendet werden kann. Danke fürs Lesen; Wie immer bin ich hier, um in den Kommentaren oder auf Twitter (@noahhendrix) zu helfen.

  • Folgen Sie uns auf Twitter oder abonnieren Sie den NETTUTS RSS-Feed, um weitere tägliche Tipps und Artikel zur Webentwicklung zu erhalten.
Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.