Die Maps JavaScript API v2 ist seit dem 26. Mai 2021 nicht mehr verfügbar. Die entsprechenden Karten Ihrer Website funktionieren nicht mehr. Stattdessen werden JavaScript-Fehler zurückgegeben. Wenn Sie weiter Karten auf Ihrer Website verwenden möchten, müssen Sie zu Version 3 der Maps JavaScript API migrieren. In diesem Leitfaden wird der Prozess erläutert.
Übersicht
Jede Anwendung hat einen etwas anderen Migrationsprozess. Es gibt jedoch einige Schritte, die für alle Projekte gleich sind:
- Holen Sie sich einen neuen Schlüssel. Für die Maps JavaScript API werden jetzt die Schlüssel in der Google Cloud Console verwaltet. Wenn du noch einen V2-Schlüssel verwendest, solltest du dir vor Beginn der Migration einen neuen API-Schlüssel besorgen.
- Aktualisieren Sie Ihr API-Bootstrap. In den meisten Anwendungen wird die Maps JavaScript API 3 mit dem folgenden Code geladen:
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
- Aktualisieren Sie Ihren Code. Der Umfang der erforderlichen Änderungen hängt stark von Ihrer Anwendung ab. Zu den häufigen Änderungen gehören:
- Verweisen Sie immer auf den google.maps-Namespace. In Version 3 wird der gesamte Code der Maps JavaScript API im Namespace
google.maps.*
statt im globalen Namespace gespeichert. Die meisten Objekte wurden im Rahmen dieses Vorgangs ebenfalls umbenannt. Anstelle von GMap2
wird jetzt beispielsweise google.maps.Map
geladen.
- Entfernen Sie alle Verweise auf veraltete Methoden. Einige Dienstmethoden für allgemeine Zwecke wurden entfernt, z. B.
GDownloadURL
und GLog
.
Ersetzen Sie diese Funktionen entweder durch Dienstbibliotheken von Drittanbietern oder entfernen Sie diese Verweise aus Ihrem Code.
- Optional: Fügen Sie Ihrem Code Bibliotheken hinzu. Viele Funktionen wurden in Dienstbibliotheken ausgelagert, sodass jede App nur die Teile der API laden muss, die verwendet werden.
- Optional: Konfigurieren Sie Ihr Projekt für die Verwendung der externen V3-Assets.
Mit den externen V3-Elementen können Sie Ihren Code mit dem Closure Compiler validieren oder die automatische Vervollständigung in Ihrer IDE auslösen.
Weitere Informationen zu erweiterter Kompilierung und externen Dateien
- Testen und iterieren Sie haben noch etwas Arbeit vor sich, aber Sie sind auf dem besten Weg zu Ihrer neuen Kartenanwendung in Version 3.
Änderungen in Version 3 der Maps JavaScript API
Bevor Sie mit der Migration beginnen, sollten Sie sich mit den Unterschieden zwischen der Maps JavaScript API Version 2 und der Maps JavaScript API Version 3 vertraut machen. Die neueste Version der Maps JavaScript API wurde von Grund auf neu geschrieben. Dabei wurde ein Schwerpunkt auf moderne JavaScript-Programmiertechniken, eine verstärkte Nutzung von Bibliotheken und eine vereinfachte API gelegt.
Der API wurden viele neue Funktionen hinzugefügt und einige bekannte Funktionen wurden geändert oder sogar entfernt. In diesem Abschnitt werden einige der wichtigsten Unterschiede zwischen den beiden Versionen hervorgehoben.
Die API v3 umfasst folgende Änderungen:
- Eine optimierte Kernbibliothek. Viele der zusätzlichen Funktionen wurden in Bibliotheken verschoben, um die Lade- und Parsezeiten für die Core API zu reduzieren. So können Karten auf jedem Gerät schnell geladen werden.
- Die Leistung mehrerer Funktionen wurde verbessert, z. B. das Polygon-Rendering und das Setzen von Markierungen.
- Ein neuer Ansatz für clientseitige Nutzungslimits, um geteilte Adressen besser zu berücksichtigen, die von mobilen Proxys und Unternehmensfirewalls verwendet werden.
- Unterstützung für mehrere moderne Browser und mobile Browser hinzugefügt. Die Unterstützung für Internet Explorer 6 wurde entfernt.
- Viele der allgemeinen Hilfsklassen wurden entfernt (
GLog
oder
GDownloadUrl
). Heutzutage gibt es viele hervorragende JavaScript-Bibliotheken mit ähnlichen Funktionen, z. B. Closure oder jQuery.
- Eine HTML5-Implementierung von Street View, die auf allen Mobilgeräten geladen werden kann.
- Benutzerdefinierte Street View-Panoramen mit Ihren eigenen Fotos, mit denen Sie Panoramabilder von Skipisten, zum Verkauf stehenden Häusern oder anderen interessanten Orten teilen können.
- Mit Karten mit benutzerdefinierten Stilen können Sie die Darstellung von Elementen auf der Basiskarte an Ihren individuellen visuellen Stil anpassen.
- Unterstützung für mehrere neue Dienste, z. B. ElevationService und Distance Matrix.
- Die verbesserten Routendienste bieten alternative Routen, Routenoptimierung (ungefähre Lösungen für das
Rundreiseproblem), Fahrradrouten (mit
Fahrradebene), öffentliche Verkehrsmittelpläne und
bewegliche Routen.
- Ein aktualisiertes Geocoding-Format, das genauere Informationen zum Typ liefert als der Wert
accuracy
der Geocoding API v2.
- Unterstützung für mehrere Infofenster auf einer einzelnen Karte
Neuer Schlüssel
Die Maps JavaScript API 3 verwendet ein neues Schlüsselsystem von Version 2. Möglicherweise verwenden Sie bereits einen V3-Schlüssel für Ihre Anwendung. In diesem Fall sind keine Änderungen erforderlich. Prüfen Sie dazu, ob der key
-Parameter in der URL enthalten ist, über die Sie die Maps JavaScript API laden. Wenn der Schlüsselwert mit „ABQIAA“ beginnt, verwenden Sie einen V2-Schlüssel. Wenn Sie einen V2-Schlüssel haben, müssen Sie im Rahmen der Migration auf einen V3-Schlüssel umstellen. Dabei geschieht Folgendes:
Der Schlüssel wird beim Laden der Maps JavaScript API 3 übergeben.
Weitere Informationen zum Generieren von API-Schlüsseln
Wenn Sie Google Maps APIs for Work nutzen, verwenden Sie möglicherweise eine Client-ID mit dem Parameter client
anstelle des Parameters key
. Client-IDs werden in der Maps JavaScript API v3 weiterhin unterstützt und müssen nicht umgestellt werden.
API laden
Die erste Änderung, die Sie an Ihrem Code vornehmen müssen, betrifft das Laden der API. In Version 2 wird die Maps JavaScript API über eine Anfrage an http://maps.google.com/maps
geladen. Wenn Sie die Maps JavaScript API 3 laden, müssen Sie die folgenden Änderungen vornehmen:
- API von
//maps.googleapis.com/maps/api/js
laden
- Entfernen Sie den Parameter
file
.
- Aktualisieren Sie den Parameter
key
mit Ihrem neuen V3-Schlüssel. Kunden der Google Maps APIs for Work sollten einen client
-Parameter verwenden.
- (Nur Google Maps Platform-Premiumoption) Der Parameter
client
muss wie im
Entwicklerleitfaden für die Google Maps Platform-Premiumoption beschrieben angegeben werden.
- Entfernen Sie den Parameter
v
, um die neueste veröffentlichte Version anzufordern, oder ändern Sie seinen Wert entsprechend dem V3-Versionierungsschema.
- Optional: Ersetzen Sie den Parameter
hl
durch language
und bewahren Sie den Wert bei.
- Optional: Fügen Sie einen
libraries
-Parameter hinzu, um optionale Bibliotheken zu laden.
Im einfachsten Fall wird in der v3-Bootstrap-Datei nur der API-Schlüsselparameter angegeben:
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
Im folgenden Beispiel wird die neueste Version der Maps JavaScript API v2 auf Deutsch angefordert:
<script src="//maps.google.com/maps?file=api&v=2.x&key=YOUR_API_KEY&hl=de"></script>
Das folgende Beispiel ist eine entsprechende Anforderung für v3.
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&language=de"></script>
Einführung in den google.maps-Namespace
Die wohl auffälligste Änderung in der Maps JavaScript API Version 3 ist die Einführung des google.maps
-Namespace. Die V2 API platziert standardmäßig alle Objekte im globalen Namespace, was zu Namenskollisionen führen kann. In Version 3 befinden sich alle Objekte im Namespace google.maps
.
Wenn Sie Ihre Anwendung zu Version 3 migrieren, müssen Sie Ihren Code ändern, damit der neue Namespace verwendet werden kann. Leider funktioniert es nicht ganz, nach „G“ zu suchen und es durch „google.maps.“ zu ersetzen. Es ist jedoch eine gute Faustregel, die Sie beim Überprüfen Ihres Codes anwenden können. Im Folgenden finden Sie einige Beispiele für die entsprechenden Klassen in Version 2 und Version 3.
v2 |
v3 |
GMap2 |
google.maps.Map |
GLatLng |
google.maps.LatLng |
GInfoWindow |
google.maps.InfoWindow |
GMapOptions |
google.map.MapOptions |
G_API_VERSION |
google.maps.version |
GPolyStyleOptions |
google.maps.PolygonOptions or
google.maps.PolylineOptions |
Veralteten Code entfernen
Die Maps JavaScript API 3 bietet Parallelen zu den meisten Funktionen in Version 2. Es gibt jedoch einige Klassen, die nicht mehr unterstützt werden. Im Rahmen der Migration sollten Sie diese Klassen entweder durch Dienstbibliotheken von Drittanbietern ersetzen oder diese Verweise aus Ihrem Code entfernen. Es gibt viele hervorragende JavaScript-Bibliotheken mit ähnlichen Funktionen, z. B. Closure oder jQuery.
Die folgenden Klassen haben in der Maps JavaScript API 3 keine Entsprechung:
GBounds | GLanguage |
GBrowserIsCompatible | GLayer |
GControl | GLog |
GControlAnchor | GMercatorProjection |
GControlImpl | GNavLabelControl |
GControlPosition | GObliqueMercator |
GCopyright | GOverlay |
GCopyrightCollection | GPhotoSpec |
GDownloadUrl | GPolyEditingOptions |
GDraggableObject | GScreenOverlay |
GDraggableObjectOptions | GStreetviewFeatures |
GFactualGeocodeCache | GStreetviewLocation |
GGeoAddressAccuracy | GStreetviewOverlay |
GGeocodeCache | GStreetviewUserPhotosOptions |
GGoogleBar | GTileLayerOptions |
GGoogleBarAdsOptions | GTileLayerOverlayOptions |
GGoogleBarLinkTarget | GTrafficOverlayOptions |
GGoogleBarListingTypes | GUnload |
GGoogleBarOptions | GXml |
GGoogleBarResultList | GXmlHttp |
GInfoWindowTab | GXslt |
GKeyboardHandler |
|
Code vergleichen
Vergleichen wir zwei recht einfache Anwendungen, die mit der V2- und der V3-API geschrieben wurden.
<!DOCTYPE html>
<html>
<head>
<script src="//maps.google.com/maps?file=api&v=2&key=YOUR_API_KEY"></script>
<style>
html, body, #map { height: 100%; margin: 0; }
</style>
<script>
function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(
document.getElementById('map'));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
map.setUIToDefault();
map.addOverlay(new GMarker(new GLatLng(37.4419, -122.1419)));
}
}
</script>
</head>
<body onload="initialize()" onunload="GUnload()">
<div id="map"></div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
<style>
html, body, #map { height: 100%; margin: 0; }
</style>
<script>
function initialize() {
var map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(37.4419, -122.1419),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
position: new google.maps.LatLng(37.4419, -122.1419),
map: map
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map"></div>
</body>
</html>
Wie Sie sehen, gibt es einige Unterschiede zwischen den beiden Anwendungen. Wichtige Änderungen sind:
- Die Adresse, über die die API geladen wird, wurde geändert.
- Die Methoden
GBrowserIsCompatible()
und GUnload()
sind in Version 3 nicht mehr erforderlich und wurden aus der API entfernt.
- Das
GMap2
-Objekt wird durch google.maps.Map
als zentrales Objekt in der API ersetzt.
- Eigenschaften werden jetzt über die Optionenklassen geladen. Im obigen Beispiel werden die drei zum Laden einer Karte erforderlichen Eigenschaften (
center
, zoom
und mapTypeId
) über ein MapOptions
-Objekt festgelegt, das inline eingefügt ist.
- Die Standardbenutzeroberfläche ist in v3 aktiviert. Sie können dies deaktivieren, indem Sie im
MapOptions
-Objekt das Attribut disableDefaultUI
auf „wahr“ setzen.
Zusammenfassung
Sie haben jetzt einen Eindruck von einigen der wichtigsten Punkte bei der Migration von Version 2 zu Version 3 der Maps JavaScript API erhalten.
Möglicherweise benötigen Sie weitere Informationen, die jedoch von Ihrer Anwendung abhängen. In den folgenden Abschnitten finden Sie Migrationsanleitungen für bestimmte Fälle, die möglicherweise auftreten. Außerdem gibt es mehrere Ressourcen, die Ihnen während des Upgrades helfen können.
- In der Entwicklerdokumentation für die Maps JavaScript API Version 3 finden Sie weitere Informationen zur API und ihrer Funktionsweise.
- In der Referenz zur Maps JavaScript API Version 3 finden Sie weitere Informationen zu den neuen Klassen und Methoden in der Version 3 der API.
- In der Stack Overflow-Community können Sie Fragen zu Code stellen. Auf der Website werden für Fragen und Antworten zur Maps JavaScript API die Tags google-maps oder google-maps-api-3 verwendet.
- Kunden der Google Maps Platform-Premiumoption sollten sich die Dokumentation zur Google Maps Platform-Premiumoption durchlesen.
- Im Google Geo Developers Blog erfahren Sie mehr über die neuesten Änderungen an der API.
Wenn Sie Fragen zu diesem Artikel haben, verwenden Sie bitte den Link FEEDBACK GEBEN oben auf dieser Seite.
In diesem Abschnitt werden die beliebtesten Funktionen der Version 2 und Version 3 der Maps JavaScript API verglichen. Jeder Abschnitt der Referenz kann einzeln gelesen werden. Wir empfehlen, sich diese Referenz nicht vollständig durchzulesen, sondern sie je nach Fall als Leitfaden für die Migration zu verwenden.
- Ereignisse: Ereignisse registrieren und behandeln
- Steuerelemente: Mit diesen Steuerelementen können Sie die Navigation auf der Karte steuern.
- Overlays: Objekte auf der Karte hinzufügen und bearbeiten.
- Kartentypen: e Kacheln, aus denen die Basiskarte besteht
- Ebenen: Inhalte als Gruppe hinzufügen und bearbeiten, z. B. KML- oder Verkehrsebenen.
- Dienste: Sie arbeiten mit den Geocoding-, Wegbeschreibungs- oder Street View-Diensten von Google.
Ereignisse
Das Ereignismodell der Maps JavaScript API 3 ähnelt dem in Version 2, obwohl sich im Hintergrund viel geändert hat.
Neues Ereignis zur Unterstützung von MVC
Die API v3 enthält eine neue Art von Ereignis, um Änderungen des MVC-Zustands darzustellen. Es gibt jetzt zwei Arten von Ereignissen:
- Nutzerereignisse, wie z. B. Mausklicks, werden vom DOM an die Maps JavaScript API weitergeleitet. Diese Ereignisse unterscheiden sich von standardmäßigen DOM-Ereignissen und werden separat verarbeitet.
- Benachrichtigungen zu MVC-Statusänderungen geben Aufschluss über Änderungen an Maps API-Objekten und werden einer
property_changed
-Konvention entsprechend benannt.
Jedes Maps-API-Objekt exportiert eine Anzahl benannter Ereignisse. Anwendungen, für die bestimmte Ereignisse benötigt werden, sollten Ereignis-Listener für die entsprechenden Ereignisse registrieren und Code ausführen, wenn die Ereignisse erfasst werden. Dieser ereignisgesteuerte Mechanismus ist in der Maps JavaScript API Version 2 und Version 3 identisch, mit der Ausnahme, dass sich der Namespace von GEvent
in google.maps.event
geändert hat:
GEvent.addListener(map, 'click', function() {
alert('You clicked the map.');
});
google.maps.event.addListener(map, 'click', function() {
alert('You clicked the map.');
});
Event-Listener entfernen
Aus Leistungsgründen sollten Sie einen Ereignis-Listener entfernen, wenn er nicht mehr benötigt wird. Das Entfernen eines Ereignislisteners funktioniert in Version 2 und Version 3 auf die gleiche Weise:
- Wenn Sie einen Ereignis-Listener erstellen, wird ein undurchsichtiges Objekt (GEventListener in Version 2, MapsEventListener in Version 3) zurückgegeben.
- Wenn Sie den Ereignis-Listener entfernen möchten, übergeben Sie dieses Objekt an die Methode
removeListener()
(GEvent.removeListener()
in Version 2 oder google.maps.event.removeListener()
in Version 3), um den Ereignis-Listener zu entfernen.
DOM-Ereignisse beobachten
Wenn Sie DOM-Ereignisse (Document Object Model) erfassen und darauf reagieren möchten, bietet Version 3 die statische Methode google.maps.event.addDomListener()
, die der Methode GEvent.addDomListener()
in Version 2 entspricht.
Übergebene Argumente in Ereignissen
Bei UI-Ereignissen wird häufig ein Ereignisargument übergeben, auf das der Ereignis-Listener dann zugreifen kann. Die meisten Ereignisargumente in Version 3 wurden vereinfacht, um für Objekte in der API einheitlicher zu sein. Weitere Informationen finden Sie in der Referenz für Version 3.
In Ereignis-Listenern der Version 3 gibt es kein overlay
-Argument. Wenn Sie ein click
-Ereignis auf einer V3-Karte registrieren, erfolgt der Callback nur dann, wenn der Nutzer auf die Basiskarte klickt. Du kannst zusätzliche Callbacks für anklickbare Overlays registrieren, wenn du auf diese Klicks reagieren möchtest.
// Passes an overlay argument when clicking on a map
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
map.setUIToDefault();
GEvent.addListener(map,'click', function(overlay, latlng) {
if (latlng) {
var marker = new GMarker(latlng);
map.addOverlay(marker);
}
});
// Passes only an event argument
var myOptions = {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map'),
myOptions);
google.maps.event.addListener(map, 'click', function(event) {
var marker = new google.maps.Marker({
position: event.latLng,
map: map
});
});
Steuerung
Die Maps JavaScript API zeigt UI-Steuerelemente an, mit denen Nutzer mit Ihrer Karte interagieren können. Mit der API können Sie anpassen, wie diese Steuerelemente angezeigt werden.
Änderungen an Steuerelementtypen
Mit der v3 API wurden einige Änderungen an control
-Typen eingeführt.
- Die V3 API unterstützt zusätzliche Kartentypen, einschließlich Geländekarten und die Möglichkeit, benutzerdefinierte Kartentypen hinzuzufügen.
- Die hierarchische V2-Steuerung
GHierarchicalMapTypeControl
ist nicht mehr verfügbar.
Mit dem Steuerelement google.maps.MapTypeControlStyle.HORIZONTAL_BAR
können Sie einen ähnlichen Effekt erzielen.
- Das horizontale Layout, das in Version 2 von
GMapTypeControl
bereitgestellt wird, ist in Version 3 nicht verfügbar.
Steuerelemente zur Karte hinzufügen
Mit der Maps JavaScript API 2 fügen Sie Ihrer Karte Steuerelemente über die addControl()
-Methode Ihres Kartenobjekts hinzu. In Version 3 ändern Sie nicht mehr direkt die Steuerelemente, sondern das zugehörige MapOptions
-Objekt. Im folgenden Beispiel wird gezeigt, wie die Karte angepasst wird, um die folgenden Steuerelemente hinzuzufügen:
- Schaltflächen, über die der Nutzer zwischen den verfügbaren Kartentypen wechselt
- Eine Kartenskalierung
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
// Add controls
map.addControl(new GMapTypeControl());
map.addControl(new GScaleControl());
var myOptions = {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP,
// Add controls
mapTypeControl: true,
scaleControl: true
};
var map = new google.maps.Map(document.getElementById('map'),
myOptions);
Steuerelemente auf der Karte positionieren
Die Positionierung von Steuerelementen wurde in v3 erheblich geändert. In Version 2 nimmt die addControl()
-Methode einen optionalen zweiten Parameter an, mit dem Sie die Position des Steuerelements relativ zu den Ecken der Karte angeben können.
In Version 3 legen Sie die Position eines Steuerelements über das Attribut position
der Steuerelementoptionen fest. Die Positionierung dieser Steuerelemente ist nicht absolut. Stattdessen ordnet die API die Steuerelemente auf intelligente Weise an. Dabei werden vorhandene Kartenelemente sowie die jeweiligen Einschränkungen (z. B. die Kartengröße) berücksichtigt.
So wird die Kompatibilität der Standardsteuerelemente mit Ihren Steuerelementen sichergestellt.
Weitere Informationen finden Sie unter Positionierung in Version 3 steuern.
Im folgenden Code werden die Steuerelemente der obigen Beispiele neu positioniert:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
// Add map type control
map.addControl(new GMapTypeControl(), new GControlPosition(
G_ANCHOR_TOP_LEFT, new GSize(10, 10)));
// Add scale
map.addControl(new GScaleControl(), new GControlPosition(
G_ANCHOR_BOTTOM_RIGHT, new GSize(20, 20)));
var myOptions = {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP,
// Add map type control
mapTypeControl: true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.TOP_LEFT
},
// Add scale
scaleControl: true,
scaleControlOptions: {
position: google.maps.ControlPosition.BOTTOM_RIGHT
}
};
var map = new google.maps.Map(document.getElementById('map'),
myOptions);
Benutzerdefinierte Steuerelemente
Mit der Maps JavaScript API können Sie benutzerdefinierte Navigationssteuerelemente erstellen.
Wenn Sie Steuerelemente mit der V2 API anpassen möchten, müssen Sie eine Unterklasse der Klasse GControl
erstellen und Handler für die Methoden initialize()
und getDefaultPosition()
definieren.
In Version 3 gibt es kein Äquivalent für die Klasse GControl
. Stattdessen werden Steuerelemente als DOM-Elemente dargestellt. Wenn Sie ein benutzerdefiniertes Steuerelement mit der V3 API hinzufügen möchten, erstellen Sie in einem Konstruktor eine DOM-Struktur für das Steuerelement als untergeordnetes Element eines Node
(z.B. eines <div>
-Elements) und fügen Sie Ereignis-Listener hinzu, um alle DOM-Ereignisse zu verarbeiten. Fügen Sie den Node
in das controls[position]
-Array der Karten ein, um der Karte eine Instanz des benutzerdefinierten Steuerelements hinzuzufügen.
Angenommen, es gibt eine HomeControl
-Klassenimplementierung, die den oben genannten Anforderungen an die Benutzeroberfläche entspricht (weitere Informationen finden Sie in der Dokumentation zu benutzerdefinierten Steuerelementen). In den folgenden Codebeispielen wird gezeigt, wie einer Karte ein benutzerdefiniertes Steuerelement hinzugefügt wird.
map.addControl(new HomeControl(),
GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10)));
var homeControlDiv = document.createElement('DIV');
var homeControl = new HomeControl(homeControlDiv, map);
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(
homeControlDiv);
Overlays
Overlays sind Objekte, die Sie der Karte hinzufügen, um Punkte, Linien, Bereiche oder Gruppen von Objekten zu kennzeichnen.
Overlays hinzufügen und entfernen
Die Objekttypen, die durch ein Overlay dargestellt werden, sind in Version 2 und Version 3 identisch. Sie werden jedoch unterschiedlich behandelt.
In der v2 API wurden Overlays mithilfe der Methoden addOverlay()
und removeOverlay()
des GMap2
-Objekts zur Karte hinzugefügt oder daraus entfernt. In Version 3 ordnen Sie einem Overlay über das Attribut map
der zugehörigen Klasse mit Overlay-Optionen eine Karte zu.
Sie können ein Overlay auch direkt hinzufügen oder entfernen, indem Sie die Methode setMap()
des Overlay-Objekts aufrufen und die gewünschte Karte angeben. Wenn Sie die Karteneigenschaft auf null
festlegen, wird das Overlay entfernt.
In Version 3 gibt es keine clearOverlays()
-Methode.
Wenn Sie mehrere Overlays verwalten möchten, erstellen Sie ein Array für die Overlays. Sie können dann setMap()
für jedes Overlay im Array aufrufen und null
übergeben, um sie zu entfernen.
Frei verschiebbare Markierungen
Marker sind standardmäßig klickbar, aber nicht ziehbar. In den folgenden beiden Beispielen wird eine ziehbare Markierung hinzugefügt:
var myLatLng = new GLatLng(-25.363882, 131.044922);
var map = new GMap2(document.getElementById('map'));
map.setCenter(myLatLng, 4);
var marker = new GMarker(latLng, {
draggable: true
});
map.addOverlay(marker);
var myLatLng = new google.maps.LatLng(-25.363882, 131.044922);
var map = new google.maps.Map(
document.getElementById('map'), {
center: myLatLng,
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
position: myLatLng,
draggable: true,
map: map
});
Symbole
Sie können ein benutzerdefiniertes Icon festlegen, das anstelle des Standardmarkers angezeigt wird.
Wenn Sie ein benutzerdefiniertes Image in v2 verwenden möchten, können Sie eine GIcon
-Instanz aus dem G_DEFAULT_ICON type
erstellen und ändern. Wenn Ihr Bild größer oder kleiner als das Standardsymbol ist, müssen Sie es mit einer GSize
-Instanz angeben.
Dieser Prozess wird in der API v3 ein wenig vereinfacht.
Legen Sie dazu einfach die Eigenschaft icon
der Markierung auf die URL Ihres benutzerdefinierten Bildes fest. Die API passt die Größe des Symbols dann automatisch an.
Die Maps JavaScript API unterstützt auch komplexe Symbole.
Ein komplexes Symbol kann mehrere Kacheln, komplexe Formen oder die „Stapelreihenfolge“ für die Anzeige der Bilder im Verhältnis zu anderen Overlays enthalten. Wenn Sie einer Markierung in Version 2 eine Form hinzufügen möchten, müssen Sie die zusätzliche Eigenschaft in jeder GIcon
-Instanz angeben und sie als Option an einen GMarker
-Konstruktor übergeben. In Version 3 sollten für Symbole, die so definiert werden, die icon
-Eigenschaften auf ein Objekt vom Typ Icon
festgelegt werden.
Markerschatten werden in v3 nicht unterstützt.
In den folgenden Beispielen ist eine Strandflagge am Bondi Beach in Australien zu sehen. Der transparente Teil des Symbols ist nicht anklickbar:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
map.setUIToDefault();
var flagIcon = new GIcon(G_DEFAULT_ICON);
flagIcon.image = '/images/beachflag.png';
flagIcon.imageMap = [1, 1, 1, 20, 18, 20, 18 , 1];
var bbLatLng = new GLatLng(-33.890542, 151.274856);
map.addOverlay(new GMarker(bbLatLng, {
icon: flagIcon
}));
var map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var shape = {
coord: [1, 1, 1, 20, 18, 20, 18 , 1],
type: 'poly'
};
var bbLatLng = new google.maps.LatLng(-33.890542, 151.274856);
var bbMarker = new google.maps.Marker({
icon: '/images/beachflag.png'
shape: shape,
position: bbLatLng,
map: map
});
Polylinien
Eine Polylinie besteht aus einem Array von LatLng
s sowie einer Reihe von Liniensegmenten, die diese Orte in einer geordneten Reihenfolge miteinander verbinden.
Das Erstellen und Darstellen eines Polyline
-Objekts in Version 3 ähnelt der Verwendung eines GPolyline
-Objekts in Version 2. In den folgenden Beispielen wird eine halbtransparente, 3 Pixel breite geodätische Polylinie von Zürich über Singapur nach Sydney gezeichnet:
var polyline = new GPolyline(
[
new GLatLng(47.3690239, 8.5380326),
new GLatLng(1.352083, 103.819836),
new GLatLng(-33.867139, 151.207114)
],
'#FF0000', 3, 0.5, {
geodesic: true
});
map.addOverlay(polyline);
var polyline = new google.maps.Polyline({
path: [
new google.maps.LatLng(47.3690239, 8.5380326),
new google.maps.LatLng(1.352083, 103.819836),
new google.maps.LatLng(-33.867139, 151.207114)
],
strokeColor: '#FF0000',
strokeOpacity: 0.5,
strokeWeight: 3,
geodesic: true
});
polyline.setMap(map);
Kodierte Polylinien
In Version 3 wird das Erstellen von Polyline
-Objekten direkt aus codierten Polylinien nicht unterstützt. Stattdessen bietet die Geometry Library Methoden zum Codieren und Decodieren von Polylinien. Weitere Informationen zum Laden dieser Bibliothek finden Sie unter Bibliotheken in der Maps API v3.
In den folgenden Beispielen wird dieselbe codierte Polylinie gezeichnet. Im V3-Code wird die Methode decodePath()
aus dem Namespace google.maps.geometry.encoding
verwendet.
var polyline = new GPolyline.fromEncoded({
points: 'kwb`Huqbs@ztzwGgvpdQbw}uEoif`H',
levels: 'PPP',
zoomFactor: 2,
numLevels: 18,
color: '#ff0000',
opacity: 0.8,
weight: 3
});
map.addOverlay(polyline);
var polyline = new google.maps.Polyline({
path: google.maps.geometry.encoding.decodePath(
'kwb`Huqbs@ztzwGgvpdQbw}uEoif`H'),
strokeColor: '#FF0000',
strokeOpacity: 0.5,
strokeWeight: 3,
});
polyline.setMap(map);
Polygone
Ein Polygon definiert einen Bereich in einem geschlossenen Rahmen. Ähnlich wie das Polyline
-Objekt bestehen Polygon
-Objekte aus einer Reihe von Punkten in einer geordneten Reihenfolge. Die Klasse Polygon
von Version 3 ähnelt der Klasse GPolygon
von Version 2, mit der wichtigen Ausnahme, dass der Startknoten am Ende des Pfads nicht mehr wiederholt werden muss, um den Kreis zu schließen. Die V3 API schließt alle Polygone automatisch, indem ein Strich gezogen wird, der die letzte Koordinate mit der ersten verbindet. Mit den folgenden Code-Snippets wird ein Polygon erstellt, das das Bermudadreieck darstellt:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(24.886436, -70.268554), 5);
var bermudaTriangle = new GPolygon(
[
new GLatLng(25.774252, -80.190262),
new GLatLng(18.466465, -66.118292),
new GLatLng(32.321384, -64.75737),
new GLatLng(25.774252, -80.190262)
],
'#FF0000', 2, 0.8, '#FF0000', 0.35);
map.addOverlay(bermudaTriangle);
var map = new google.maps.Map(document.getElementById('map'), {
center: new google.maps.LatLng(24.886436, -70.268554),
mapTypeId: google.maps.MapTypeId.TERRAIN,
zoom: 5
});
var bermudaTriangle = new google.maps.Polygon({
paths: [
new google.maps.LatLng(25.774252, -80.190262),
new google.maps.LatLng(18.466465, -66.118292),
new google.maps.LatLng(32.321384, -64.75737)
],
strokeColor: '#FF0000',
strokeWeight: 2,
strokeOpacity: 0.8,
fillColor: '#FF0000',
fillOpacity: 0.35
});
bermudaTriangle.setMap(map);
Vom Nutzer bearbeitbare Formen
Polylinien und Polygone lassen sich so definieren, dass sie vom Nutzer bearbeitet werden können. Die folgenden Code-Snippets sind äquivalent:
map.addOverlay(polyline);
polyline.enableEditing();
polyline.setMap(map);
polyline.setEditable(true);
Weitere Informationen zu erweiterten Zeichenfunktionen finden Sie in der Drawing Library in der V3-Dokumentation.
Infofenster
Mit einem InfoWindow
werden Inhalte in einem schwebenden Fenster über der Karte angezeigt. Zwischen den Info-Fenstern in v2 und v3 gibt es einige wesentliche Unterschiede:
- Die v2 API unterstützt nur
GInfoWindow
pro Karte, während die v3 API mehrere gleichzeitige InfoWindow
s auf jeder Karte unterstützt.
- Die v3-
InfoWindow
bleibt geöffnet, wenn Sie auf die Karte klicken. Bei Version 2 wird die GInfoWindow
automatisch geschlossen, wenn Sie auf die Karte klicken. Sie können das Verhalten von Version 2 emulieren, indem Sie dem Map
-Objekt einen click
-Listener hinzufügen.
- Die v3 API bietet keine native Unterstützung für eine
InfoWindow
mit Tabs.
Boden-Overlays
Wenn Sie ein Bild auf einer Karte platzieren möchten, sollten Sie ein GroundOverlay
-Objekt verwenden. Der Konstruktor für ein GroundOverlay
ist in Version 2 und Version 3 im Wesentlichen identisch: Er gibt eine Bild-URL und die Grenzen des Bilds als Parameter an.
Im folgenden Beispiel wird eine antike Karte von Newark, New Jersey, als Overlay auf die Karte gelegt:
var bounds = new GLatLngBounds(
new GLatLng(40.716216, -74.213393),
new GLatLng(40.765641, -74.139235));
var overlay = new GGroundOverlay(
'http://lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
bounds);
map.addOverlay(overlay);
var bounds = new google.maps.LatLngBounds(
new google.maps.LatLng(40.716216, -74.213393),
new google.maps.LatLng(40.765641, -74.139235));
var overlay = new google.maps.GroundOverlay(
'http://lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
bounds);
overlay.setMap(map);
Kartentypen
Die in Version 2 und Version 3 verfügbaren Kartentypen unterscheiden sich geringfügig, aber alle grundlegenden Kartentypen sind in beiden Versionen der API verfügbar. In Version 2 werden standardmäßig „gemalt“ aussehende Straßenkartenkacheln verwendet. In Version 3 muss beim Erstellen eines google.maps.Map
-Objekts jedoch ein bestimmter Kartentyp angegeben werden.
Typische Kartentypen
Die vier Basiskartentypen sind sowohl in v2 als auch in v3 verfügbar:
MapTypeId.ROADMAP
(ersetzt G_NORMAL_MAP
) zeigt die Straßenkarte an.
MapTypeId.SATELLITE
(ersetzt G_SATELLITE_MAP
)
zeigt Google Earth-Satellitenbilder an.
MapTypeId.HYBRID
(ersetzt G_HYBRID_MAP
) zeigt eine Mischung aus normalen und Satellitenbildern an.
MapTypeId.TERRAIN
(ersetzt G_PHYSICAL_MAP
) zeigt eine physische Karte an, die auf Geländedaten beruht.
Im nachfolgenden Beispiel wird die Karte in v2 und v3 auf die Geländeansicht gesetzt:
map.setMapType(G_PHYSICAL_MAP);
map.setMapTypeId(google.maps.MapTypeId.TERRAIN);
Bei der Maps JavaScript API 3 wurden auch einige Änderungen an den weniger gängigen Kartentypen vorgenommen:
- Kartenkacheln für andere Himmelskörper als die Erde sind in der V3 API nicht als Kartentypen verfügbar. Sie können jedoch wie in diesem Beispiel als benutzerdefinierte Kartentypen verwendet werden.
- In Version 3 gibt es keinen speziellen Kartentyp, der den Typ
G_SATELLITE_3D_MAP
aus Version 2 ersetzt. Stattdessen können Sie das Google Earth-Plug-in mit dieser Bibliothek in Ihre V3-Karten einbinden.
Maximum Zoom Imagery
Satellitenbilder sind auf großen Vergrößerungsstufen nicht immer verfügbar. Wenn Sie vor dem Festlegen der Zoomstufe wissen möchten, welche maximale Zoomstufe verfügbar ist, verwenden Sie die Klasse google.maps.MaxZoomService
. Diese Klasse ersetzt die GMapType.getMaxZoomAtLatLng()
-Methode aus Version 2.
var point = new GLatLng(
180 * Math.random() - 90, 360 * Math.random() - 180);
var map = new GMap2(document.getElementById("map"));
map.setUIToDefault();
map.setCenter(point);
map.setMapType(G_HYBRID_MAP);
map.getCurrentMapType().getMaxZoomAtLatLng(point,
function(response) {
if (response.status) {
map.setZoom(response.zoom);
} else {
alert("Error in Max Zoom Service.");
}
});
var myLatlng = new google.maps.LatLng(
180 * Math.random() - 90, 360 * Math.random() - 180);
var map = new google.maps.Map(
document.getElementById("map"),{
zoom: 0,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.HYBRID
});
var maxZoomService = new google.maps.MaxZoomService();
maxZoomService.getMaxZoomAtLatLng(
myLatlng,
function(response) {
if (response.status == google.maps.MaxZoomStatus.OK) {
map.setZoom(response.zoom);
} else {
alert("Error in Max Zoom Service.");
}
});
Perspektivische Luftbilder
Wenn Sie in v3 Flugaufnahmen aktivieren, ähneln die Steuerelemente dem Steuerelement GLargeZoomControl3D
aus v2. Zusätzlich gibt es noch das Zwischensteuerelement „Rotate“ zum Drehen in die unterstützten Richtungen.
Auf dieser Karte können Sie sehen, in welchen Städten derzeit 45°-Bilder verfügbar sind. Wenn Bilder mit einem Blickwinkel von 45 Grad verfügbar sind, wird der Schaltfläche „Satellitenbilder“ der Maps API ein Untermenü hinzugefügt.
Ebenen
Ebenen sind Objekte auf der Karte, die aus einem oder mehreren Overlays bestehen. Sie können als einzelne Einheit bearbeitet werden und spiegeln in der Regel Sammlungen von Objekten wider.
Unterstützte Ebenen
Die API v3 bietet Zugriff auf mehrere unterschiedliche Ebenen. Diese Ebenen überschneiden sich in den folgenden Bereichen mit der GLayer
-Klasse der Version 2:
-
Das
KmlLayer
-Objekt rendert KML- und GeoRSS-Elemente in V3-Overlays und entspricht der GeoXml
-Ebene in V2.
- Das
TrafficLayer
-Objekt rendert eine Ebene mit Verkehrsinformationen, ähnlich wie das GTrafficOverlay
-Overlay der Version 2.
Diese Ebenen weisen Unterschiede zu v2 auf, Die Unterschiede werden unten beschrieben. Sie können einer Karte hinzugefügt werden, indem Sie setMap()
aufrufen und das Map
-Objekt übergeben, auf dem die Ebene dargestellt werden soll.
Weitere Informationen zu unterstützten Ebenen finden Sie in der Dokumentation zu Ebenen.
KML- und GeoRSS-Ebenen
Die Maps JavaScript API unterstützt die KML- und GeoRSS-Datenformate zum Anzeigen geografischer Informationen. Die KML- oder GeoRSS-Dateien müssen öffentlich zugänglich sein, wenn Sie sie in eine Karte aufnehmen möchten. In Version 3 werden diese Datenformate mit einer Instanz von KmlLayer
angezeigt, die das GGeoXml
-Objekt aus Version 2 ersetzt.
Die V3 API ist beim Rendern von KML flexibler. Sie können Infofenster unterdrücken und die Klickantwort ändern. Weitere Details finden Sie in der Dokumentation KML- und GeoRSS-Ebenen für Version 3.
Beim Rendern einer KmlLayer
gelten Größen- und Komplexitätsbeschränkungen. Weitere Informationen finden Sie in der Dokumentation zu KmlLayer.
Im folgenden Beispiel wird verglichen, wie eine KML-Datei geladen wird.
geoXml = new GGeoXml(
'https://googlearchive.github.io/js-v2-samples/ggeoxml/cta.kml');
map.addOverlay(geoXml);
var layer = new google.maps.KmlLayer(
'https://googlearchive.github.io/js-v2-samples/ggeoxml/cta.kml', {
preserveViewport: true
});
layer.setMap(map);
Verkehrsebene
Mit Version 3 können Sie mithilfe des TrafficLayer
-Objekts Echtzeitdaten zur Verkehrslage in Ihre Karten einfügen (sofern unterstützt). Die Verkehrsinformationen beziehen sich auf den Zeitpunkt, zu dem die Anfrage gestellt wird. In diesen Beispielen sind die Verkehrsinformationen für Los Angeles zu sehen:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(34.0492459, -118.241043), 13);
map.setUIToDefault();
var trafficOptions = {incidents:false};
trafficInfo = new GTrafficOverlay(trafficOptions);
map.addOverlay(trafficInfo);
var map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(34.0492459, -118.241043),
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoom: 13
});
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
Im Gegensatz zu Version 2 gibt es in Version 3 keine Optionen für den Konstruktor von TrafficLayer
. Verkehrsbehinderungen sind in v3 nicht verfügbar.
Dienste
Geocoding
Die Maps JavaScript API bietet ein geocoder
-Objekt für die dynamische Geocodierung von Adressen anhand von Nutzereingaben. Wenn Sie statische, bekannte Adressen geocodieren möchten, lesen Sie die Dokumentation zur Geocoding API.
Die Geocoding API wurde erheblich aktualisiert und erweitert. Es wurden neue Funktionen hinzugefügt und die Darstellung von Daten geändert.
GClientGeocoder
in der V2 API bot zwei verschiedene Methoden für das Vorwärts- und Rückwärts-Geocoding sowie zusätzliche Methoden, um die Geocodierung zu beeinflussen. Im Gegensatz dazu bietet das Geocoder
-Objekt der Version 3 nur eine geocode()
-Methode, die ein Objektliteral mit den Eingabebegriffen (in Form eines Geocoding Requests-Objekts) und eine Callback-Methode annimmt. Je nachdem, ob die Anfrage ein textbasiertes address
-Attribut oder ein LatLng
-Objekt enthält, gibt die Geocoding API eine Antwort für die Vorwärts- oder Rückwärtsgeokodierung zurück. Sie können die Geocodierung beeinflussen, indem Sie der Geocoding-Anfrage zusätzliche Felder übergeben:
- Wenn Sie einen textbasierten
address
einfügen, wird die Vorwärtsgeocodierung ausgelöst, was dem Aufruf der Methode getLatLng()
entspricht.
- Wenn Sie ein
latLng
-Objekt einfügen, wird die umgekehrte Geocodierung ausgelöst, was dem Aufruf der getLocations()
-Methode entspricht.
- Wenn Sie das Attribut
bounds
angeben, wird die Viewport-Voreinrichtung aktiviert. Das entspricht dem Aufrufen der Methode setViewport()
.
- Wenn Sie das Attribut
region
angeben, wird die Region Code Biasing aktiviert, was dem Aufruf der Methode setBaseCountryCode()
entspricht.
Die Geocoding-Antworten in Version 3 unterscheiden sich stark von den Antworten in Version 2. Die V3 API ersetzt die verschachtelte Struktur von V2 durch eine flachere Struktur, die sich leichter parsen lässt. Außerdem sind die Antworten der Version 3 detaillierter: Jedes Ergebnis hat mehrere Adresskomponenten, die einen besseren Eindruck von der Auflösung jedes Ergebnisses vermitteln.
Im folgenden Code wird eine Adresse in Textform verwendet und das erste Ergebnis des Geocodings angezeigt:
var geocoder = new GClientGeocoder();
var infoPanel;
var map;
var AccuracyDescription = [
'Unknown accuracy', 'country level accuracy',
'region level accuracy', 'sub-region level accuracy',
'town level accuracy', 'post code level accuracy',
'street level accuracy', 'intersection level accuracy',
'address level accuracy', 'premise level accuracy',
];
function geocode_result_handler(response) {
if (!response || response.Status.code != 200) {
alert('Geocoding failed. ' + response.Status.code);
} else {
var bounds = new GLatLngBounds(new GLatLng(
response.Placemark[0].ExtendedData.LatLonBox.south,
response.Placemark[0].ExtendedData.LatLonBox.west
), new GLatLng(
response.Placemark[0].ExtendedData.LatLonBox.north,
response.Placemark[0].ExtendedData.LatLonBox.east
));
map.setCenter(bounds.getCenter(),
map.getBoundsZoomLevel(bounds));
var latlng = new GLatLng(
response.Placemark[0].Point.coordinates[1],
response.Placemark[0].Point.coordinates[0]);
infoPanel.innerHTML += '<p>1st result is <em>' +
// No info about location type
response.Placemark[0].address +
'</em> of <em>' +
AccuracyDescription[response.Placemark[0].
AddressDetails.Accuracy] +
'</em> at <tt>' + latlng + '</tt></p>';
var marker_title = response.Placemark[0].address +
' at ' + latlng;
map.clearOverlays();
var marker = marker = new GMarker(
latlng,
{'title': marker_title}
);
map.addOverlay(marker);
}
}
function geocode_address() {
var address = document.getElementById('input-text').value;
infoPanel.innerHTML = '<p>Original address: ' + address + '</p>';
geocoder.getLocations(address, geocode_result_handler);
}
function initialize() {
map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(38, 15), 2);
map.setUIToDefault();
infoPanel = document.getElementById('info-panel');
}
var geocoder = new google.maps.Geocoder();
var infoPanel;
var map;
var marker;
function geocode_result_handler(result, status) {
if (status != google.maps.GeocoderStatus.OK) {
alert('Geocoding failed. ' + status);
} else {
map.fitBounds(result[0].geometry.viewport);
infoPanel.innerHTML += '<p>1st result for geocoding is <em>' +
result[0].geometry.location_type.toLowerCase() +
'</em> to <em>' +
result[0].formatted_address + '</em> of types <em>' +
result[0].types.join('</em>, <em>').replace(/_/, ' ') +
'</em> at <tt>' + result[0].geometry.location +
'</tt></p>';
var marker_title = result[0].formatted_address +
' at ' + latlng;
if (marker) {
marker.setPosition(result[0].geometry.location);
marker.setTitle(marker_title);
} else {
marker = new google.maps.Marker({
position: result[0].geometry.location,
title: marker_title,
map: map
});
}
}
}
function geocode_address() {
var address = document.getElementById('input-text').value;
infoPanel.innerHTML = '<p>Original address: ' + address + '</p>';
geocoder.geocode({'address': address}, geocode_result_handler);
}
function initialize() {
map = new google.maps.Map(document.getElementById('map'), {
center: new google.maps.LatLng(38, 15),
zoom: 2,
mapTypeId: google.maps.MapTypeId.HYBRID
});
infoPanel = document.getElementById('info-panel');
}
Directions
In der Maps JavaScript API Version 3 wird die Klasse GDirections
aus Version 2 durch die Klasse DirectionsService
zum Berechnen von Wegbeschreibungen ersetzt.
Die route()
-Methode in Version 3 ersetzt sowohl die load()
- als auch die loadFromWaypoints()
-Methode aus der v2 API. Diese Methode nimmt ein einzelnes DirectionsRequest
-Objektliteral mit den Eingabebegriffen und eine Callback-Methode an, die nach dem Empfang der Antwort ausgeführt werden soll. In diesem Objektliteral können Optionen angegeben werden, ähnlich wie im GDirectionsOptions
-Objektliteral in Version 2.
In der Maps JavaScript API v3 wurde die Aufgabe, Wegbeschreibungsanfragen zu senden, von der Aufgabe getrennt, Anfragen zu rendern. Diese wird jetzt mit der Klasse DirectionsRenderer
ausgeführt. Sie können ein DirectionsRenderer
-Objekt über die Methoden setMap()
und setDirections()
mit einer Karte oder einem DirectionsResult
-Objekt verknüpfen. Da der Renderer ein MVCObject
ist, erkennt er automatisch Änderungen an seinen Eigenschaften und aktualisiert die Karte, wenn sich die zugewiesenen Routen geändert haben.
Im folgenden Code wird gezeigt, wie Sie eine Wegbeschreibung zu einem bestimmten Ort über Fußwege von einer Adresse anfordern. Hinweis: Nur Version 3 kann Wegbeschreibungen für Fußgänger auf dem Fußweg im Zoo von Dublin bereitstellen.
var map;
var directions;
var directionsPanel;
function initialize() {
var origin = new google.maps.LatLng(53.348172, -6.297285);
var destination = new google.maps.LatLng(53.355502, -6.30557);
directionsPanel = document.getElementById("route");
map = new GMap2(document.getElementById('map'));
map.setCenter(origin, 10);
map.setUIToDefault();
directions = new GDirections(map, directionsPanel);
directions.loadFromWaypoints(
[origin, destination], {
travelMode: 'G_TRAVEL_MODE_WALKING',
});
}
var map;
var directionsRenderer;
var directionsService = new google.maps.DirectionsService();
function initialize() {
var origin = new google.maps.LatLng(53.348172, -6.297285);
var destination = new google.maps.LatLng(53.355502, -6.30557);
directionsRenderer = new google.maps.DirectionsRenderer();
map = new google.maps.Map(
document.getElementById('map'), {
center: origin,
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
directionsRenderer.setPanel(document.getElementById("route"));
directionsRenderer.setMap(map);
directionsService.route({
origin: origin,
destination: destination,
travelMode: google.maps.DirectionsTravelMode.WALKING
}, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsRenderer.setDirections(result);
}
});
}
Street View
Google Street View bietet interaktive 360°-Aufnahmen von ausgewählten Orten innerhalb des Abdeckungsbereichs. Die API-Version 3 unterstützt Street View nativ im Browser. Im Gegensatz dazu war für die Version 2 das Flash®-Plug-in erforderlich, um Street View-Bilder anzuzeigen.
Street View-Bilder werden über das StreetViewPanorama
-Objekt in Version 3 oder das GStreetviewPanorama
-Objekt in Version 2 unterstützt. Diese Klassen haben unterschiedliche Schnittstellen, erfüllen aber dieselbe Funktion: Sie verbinden den div
-Container mit den Street View-Bildern und ermöglichen es Ihnen, den Standort und die Perspektive des Street View-Panoramas anzugeben.
function initialize() {
var fenwayPark = new GLatLng(42.345573, -71.098326);
panoramaOptions = {
latlng: fenwayPark,
pov: {
heading: 35,
pitch: 5,
zoom: 1
}
};
var panorama = new GStreetviewPanorama(
document.getElementById('pano'),
panoramaOptions);
GEvent.addListener(myPano, "error", handleNoFlash);
}
function handleNoFlash(errorCode) {
if (errorCode == FLASH_UNAVAILABLE) {
alert('Error: Your browser does not support Flash');
return;
}
}
function initialize() {
var fenway = new google.maps.LatLng(42.345573, -71.098326);
var panoramaOptions = {
position: fenway,
pov: {
heading: 35,
pitch: 5,
zoom: 1
}
};
var panorama = new google.maps.StreetViewPanorama(
document.getElementById('pano'),
panoramaOptions);
}
Der direkte Zugriff auf Street View-Daten ist über das StreetViewService
-Objekt in Version 3 oder das ähnliche GStreetviewClient
-Objekt in Version 2 möglich. Beide bieten ähnliche Oberflächen zum Abrufen oder Prüfen der Verfügbarkeit von Street View-Daten und ermöglichen die Suche nach Standort oder Panorama-ID.
In v3 ist Street View standardmäßig aktiviert. Die Karte wird mit einem Pegman-Steuerelement für Street View angezeigt und die API verwendet das Karten-Div wieder, um Street View-Panoramen anzuzeigen. Im folgenden Code wird veranschaulicht, wie das Verhalten der Version 2 emuliert wird, indem die Street View-Panoramen in einem separaten Div platziert werden.
var marker;
var panoClient = new GStreetviewClient();
function initialize() {
if (GBrowserIsCompatible()) {
var myPano = new GStreetviewPanorama(
document.getElementById('pano'));
GEvent.addListener(myPano, 'error', handleNoFlash);
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(42.345573, -71.098326), 16);
map.setUIToDefault();
GEvent.addListener(map, 'click', function(overlay, latlng) {
if (marker) {
marker.setLatLng(latlng);
} else {
marker = new GMarker(latlng);
map.addOverlay(marker);
}
var nearestPano = panoClient.getNearestPanorama(
latlng, processSVData);
});
function processSVData(panoData) {
if (panoData.code != 200) {
alert("Panorama data not found for this location.");
}
var latlng = marker.getLatLng();
var dLat = latlng.latRadians()
- panoData.location.latlng.latRadians();
var dLon = latlng.lngRadians()
- panoData.location.latlng.lngRadians();
var y = Math.sin(dLon) * Math.cos(latlng.latRadians());
var x = Math.cos(panoData.location.latlng.latRadians()) *
Math.sin(latlng.latRadians()) -
Math.sin(panoData.location.latlng.latRadians()) *
Math.cos(latlng.latRadians()) * Math.cos(dLon);
var bearing = Math.atan2(y, x) * 180 / Math.PI;
myPano.setLocationAndPOV(panoData.location.latlng, {
yaw: bearing
});
}
function handleNoFlash(errorCode) {
if (errorCode == FLASH_UNAVAILABLE) {
alert('Error: Your browser does not support Flash');
return;
}
}
}
}
// Load the API with libraries=geometry
var map;
var marker;
var panorama;
var sv = new google.maps.StreetViewService();
function radians(degrees) { return Math.PI * degrees / 180.0 };
function initialize() {
panorama = new google.maps.StreetViewPanorama(
document.getElementById("pano"));
map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(42.345573, -71.098326),
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoom: 16
});
google.maps.event.addListener(map, 'click', function(event) {
if (!marker) {
marker = new google.maps.Marker({
position: event.latLng,
map: map
});
} else {
marker.setPosition(event.latLng);
}
sv.getPanoramaByLocation(event.latLng, 50, processSVData);
});
}
function processSVData(panoData, status) {
if (status == google.maps.StreetViewStatus.OK) {
alert("Panorama data not found for this location.");
}
var bearing = google.maps.geometry.spherical.computeHeading(
panoData.location.latLng, marker.getPosition());
panorama.setPano(panoData.location.pano);
panorama.setPov({
heading: bearing,
pitch: 0,
zoom: 1
});
panorama.setVisible(true);
marker.setMap(panorama);
}