Die Maps JavaScript API Version 2 ist seit dem 26. Mai 2021 nicht mehr verfügbar. Die Karten Ihrer Website (Version 2) funktionieren dann nicht mehr und es 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. Dieser Leitfaden hilft Ihnen dabei.
Überblick
Der Migrationsprozess unterscheidet sich bei jeder Anwendung leicht. Einige Schritte sind jedoch bei allen Projekten gleich:
- Fordern Sie einen neuen Schlüssel an. In der Maps JavaScript API werden Schlüssel jetzt über die Google Cloud Console verwaltet. Falls Sie noch einen Schlüssel der Version 2 verwenden, fordern Sie Ihren neuen API-Schlüssel an, bevor Sie mit der Migration beginnen.
- Aktualisieren Sie das API-Bootstrap. In den meisten Anwendungen wird die Maps JavaScript API Version 3 mit folgendem Code geladen:
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
- Aktualisiere deinen Code. Der Umfang der erforderlichen Änderungen hängt stark von Ihrer Anwendung ab. Zu den häufigsten Änderungen gehören:
- Verweisen Sie immer auf den Namespace „google.maps“. In Version 3 wird der gesamte Maps JavaScript API-Code im Namespace
google.maps.*
und nicht im globalen Namespace gespeichert. Die meisten Objekte wurden im Rahmen dieses Prozesses ebenfalls umbenannt. Statt GMap2
wird jetzt beispielsweise google.maps.Map
geladen.
- Entfernen Sie alle Verweise auf veraltete Methoden. Eine Reihe von allgemeinen Dienstprogrammmethoden wie
GDownloadURL
und GLog
wurde entfernt.
Ersetzen Sie diese Funktion durch Dienstprogrammbibliotheken von Drittanbietern oder entfernen Sie diese Verweise aus Ihrem Code.
- Optional: Bibliotheken in den Code einfügen Viele Funktionen wurden in Dienstprogrammbibliotheken ausgelagert, sodass jede Anwendung nur die Teile der API laden muss, die verwendet werden.
- (Optional) Konfigurieren Sie Ihr Projekt für die Verwendung externer Version 3.
Die externen v3-Elemente können verwendet werden, um Ihren Code mit dem Closure Compiler zu validieren oder die automatische Vervollständigung in Ihrer IDE auszulösen.
Weitere Informationen finden Sie unter
Erweiterte Kompilierung und Extern.
- Testen und wiederholen. Es gibt noch einiges zu tun, aber die gute Nachricht: Sie sind auf dem besten Weg zu Ihrer neuen Kartenanwendung der Version 3.
Änderungen in Version 3 der Maps JavaScript API
Bevor Sie die Migration planen, sollten Sie sich mit den Unterschieden zwischen der Maps JavaScript API Version 2 und Version 3 vertraut machen. Die neueste Version der Maps JavaScript API wurde von Grund auf neu entwickelt. Im Fokus standen moderne JavaScript-Programmiertechniken, mehr Bibliotheken und eine vereinfachte API.
Die API wurde um viele neue Funktionen ergänzt und einige bekannte Funktionen wurden geändert oder sogar entfernt. In diesem Abschnitt werden einige der wichtigsten Unterschiede zwischen den beiden Releases hervorgehoben.
Die API v3 umfasst folgende Änderungen:
- Eine optimierte Kernbibliothek. Viele der ergänzenden Funktionen wurden in Bibliotheken verschoben. Dadurch wurden die Lade- und Analysezeiten für die Core API verkürzt. So kann die Karte auf jedem Gerät schnell geladen werden.
- Die Leistung verschiedener Funktionen wie Polygon-Rendering und Markierungsposition wurde verbessert.
- Ein neuer Ansatz für clientseitige Nutzungslimits, um gemeinsame Adressen, die von mobilen Proxys und Unternehmensfirewalls verwendet werden, besser zu berücksichtigen.
- Unterstützung mehrerer moderner Browser und mobiler Browser wurde hinzugefügt. Internet Explorer 6 wird nicht mehr unterstützt.
- Viele der allgemeinen Hilfsklassen (
GLog
oder
GDownloadUrl
) wurden entfernt. Mittlerweile 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 eigenen Fotos. So können Sie Panoramen von Skipisten, Häusern oder anderen interessanten Orten teilen.
- Anpassungen für Karten mit benutzerdefinierten Stilen, mit denen Sie die Darstellung von Elementen auf der Basiskarte an Ihren individuellen visuellen Stil anpassen können
- Unterstützung verschiedener neuer Dienste wie ElevationService und Distance Matrix
- Ein verbesserter Routendienst bietet alternative Routen, Routenoptimierung (ungefähre Lösungen für das
Problem des Vertriebsmitarbeiters), Fahrradrouten (mit
Fahrradebene), Routen für öffentliche Verkehrsmittel und
ziehbare Routen.
- Ein aktualisiertes Geocoding-Format, das genauere Typinformationen als der
accuracy
-Wert der Geocoding API Version 2 liefert
- Unterstützung mehrerer Infofenster auf einer einzelnen Karte
Ihr neuer Schlüssel
Die Maps JavaScript API Version 3 verwendet ein neues Schlüsselsystem aus Version 2. Möglicherweise verwenden Sie bereits einen Schlüssel der Version 3 mit Ihrer Anwendung. In diesem Fall ist keine Änderung erforderlich. Prüfen Sie dazu die URL, über die Sie die Maps JavaScript API auf ihren key
-Parameter laden. Wenn der Schlüsselwert mit "ABQIAA" beginnt, verwenden Sie einen Schlüssel der Version 2. Wenn Sie einen Schlüssel der Version 2 haben, müssen Sie im Rahmen der Migration ein Upgrade auf einen Schlüssel der Version 3 durchführen. Dies hat folgende Auswirkungen:
Der Schlüssel wird beim Laden der Maps JavaScript API Version 3 übergeben.
Weitere Informationen zum Generieren von API-Schlüsseln
Hinweis: 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 Version 3 der Maps JavaScript API weiterhin unterstützt und müssen nicht für die Schlüsselaktualisierung durchgeführt werden.
API laden
Bei der ersten Änderung, die Sie an Ihrem Code vornehmen müssen, geht es darum, wie Sie die API laden. In Version 2 wird die Maps JavaScript API über eine Anfrage an http://maps.google.com/maps
geladen. Wenn Sie die Maps JavaScript API Version 3 laden, müssen Sie die folgenden Änderungen vornehmen:
- API aus
//maps.googleapis.com/maps/api/js
laden
- Entfernen Sie den Parameter
file
.
- Aktualisieren Sie den Parameter
key
mit Ihrem neuen Schlüssel der Version 3. Kunden von Google Maps APIs for Work sollten einen client
-Parameter verwenden.
- Nur Google Maps Platform-Premiumoption: Der Parameter
client
muss wie im
Entwicklerhandbuch für die Google Maps Platform-Premiumoption beschrieben angegeben werden.
- Entfernen Sie den
v
-Parameter, um die neueste veröffentlichte Version anzufordern, oder ändern Sie den Wert entsprechend dem Schema der v3-Versionsverwaltung.
- (Optional) Ersetzen Sie den Parameter
hl
durch language
und behalten Sie seinen Wert bei.
- (Optional) Fügen Sie einen
libraries
-Parameter hinzu, um optionale Bibliotheken zu laden.
Im einfachsten Fall gibt das V3-Bootstrap nur Ihren API-Schlüsselparameter an:
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
Im folgenden Beispiel wird die neueste Version der Maps JavaScript API Version 2 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 des Namespace „google.maps“
Die wahrscheinlich auffälligste Änderung in Version 3 der Maps JavaScript API ist die Einführung des google.maps
-Namespace. Die API V2 platziert alle Objekte standardmäßig im globalen Namespace, was zu Namenskonflikten führen kann. In v3 befinden sich alle Objekte im Namespace google.maps
.
Wenn Sie Ihre Anwendung zu v3 migrieren, müssen Sie Ihren Code ändern, um den neuen Namespace zu verwenden. Die Suche nach „G“ und das Ersetzen durch „google.maps.“ funktioniert leider nicht vollständig, aber es ist eine gute Faustregel, die Sie beim Überprüfen Ihres Codes anwenden sollten. Im Folgenden finden Sie einige Beispiele für äquivalente Klassen in v2 und v3.
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 |
Entfernen von veraltetem Google-Code
In Version 3 der Maps JavaScript API gibt es Parallelen zu den meisten Funktionen von Version 2. Einige Klassen werden jedoch nicht mehr unterstützt. Im Rahmen der Migration sollten Sie diese Klassen entweder durch Dienstprogrammbibliotheken 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 Version 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 im Vergleich
Vergleichen wir zwei eher einfache Anwendungen, die mit der API v2 und v3 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 mehrere 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 in der API durch google.maps.Map
als zentrales Objekt ersetzt.
- Eigenschaften werden jetzt über die Optionenklassen geladen. Im Beispiel oben werden die drei Eigenschaften
center
, zoom
und mapTypeId
, die zum Laden einer Karte erforderlich sind, über ein Inline-Objekt MapOptions
festgelegt.
- Die Standardbenutzeroberfläche ist in v3 aktiviert. Sie können dies deaktivieren, indem Sie das Attribut
disableDefaultUI
im MapOptions
-Objekt auf „true“ setzen.
Zusammenfassung
Sie haben jetzt einen Überblick über die 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. Die folgenden Abschnitte enthalten Migrationsanleitungen für bestimmte Fälle, auf die Sie stoßen können. Darüber hinaus gibt es mehrere Ressourcen, die während des Upgrades hilfreich sein können.
- In der Entwicklerdokumentation für Version 3 der Maps JavaScript API erfahren Sie mehr über die API und ihre Funktionsweise.
- In der Referenz zur Maps JavaScript API (Version 3) erfahren Sie mehr über die neuen Klassen und Methoden in der API Version 3.
- Die Stack Overflow-Community ist der ideale Ort, um Fragen zu Code zu stellen. Verwenden Sie auf der Website für Fragen und Antworten, die sich auf die Maps JavaScript API beziehen, die Tags google-maps oder google-maps-api-3.
- Kunden mit der Google Maps Platform-Premiumoption sollten die Dokumentation zur Google Maps Platform-Premiumoption lesen.
- Im Google Geo Developers-Blog können Sie sich hervorragend über die neuesten Änderungen an der API informieren.
Bei Problemen oder Fragen zu diesem Artikel klicken Sie bitte oben auf dieser Seite auf den Link FEEDBACK SENDEN.
In diesem Abschnitt finden Sie einen detaillierten Vergleich der beliebtesten Funktionen von Version 2 und 3 der Maps JavaScript API. Jeder Abschnitt der Referenz ist so konzipiert, dass er einzeln gelesen werden kann. Wir empfehlen, diese Referenz nicht vollständig zu lesen. Verwenden Sie das Material stattdessen, um die Migration für den jeweiligen Fall zu unterstützen.
- Ereignisse: Ereignisse registrieren und behandeln
- Steuerelemente: Auf der Karte angezeigte Navigationssteuerelemente ändern
- 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: Mit den Geocoding-, Directions- oder Street View-Diensten von Google arbeiten.
Veranstaltungen
Das Ereignismodell für die Maps JavaScript API (Version 3) ähnelt dem in Version 2, hat sich aber grundlegend geändert.
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, z. B. Mausklicks, werden vom DOM an die Maps JavaScript API weitergegeben. Diese Ereignisse sind separate Ereignisse, die sich von standardmäßigen DOM-Ereignissen unterscheiden.
- Benachrichtigungen über MVC-Statusänderungen geben Aufschluss über Änderungen an Google Maps API-Objekten und werden nach der
property_changed
-Konvention benannt.
Mit jedem Maps API-Objekt wird eine Anzahl benannter Ereignisse exportiert. Für Anwendungen, die bestimmte Ereignisse benötigen, sollten Ereignis-Listener für diese Ereignisse registriert und Code ausgeführt werden, wenn diese Ereignisse empfangen werden. Dieser ereignisgesteuerte Mechanismus ist in Version 2 und 3 der Maps JavaScript API identisch mit dem Unterschied, dass der Namespace von GEvent
in google.maps.event
geändert wurde:
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 empfiehlt es sich, einen nicht mehr benötigten Event-Listener zu entfernen. Das Entfernen eines Event-Listeners funktioniert in v2 und v3 auf dieselbe Weise:
- Wenn Sie einen Event-Listener erstellen, wird ein intransparentes Objekt zurückgegeben (GEventListener in Version 2, MapsEventListener in Version 3).
- Wenn Sie den Event-Listener entfernen möchten, übergeben Sie dieses Objekt an die
removeListener()
-Methode (GEvent.removeListener()
in V2 oder google.maps.event.removeListener()
in V3), um den Event-Listener zu entfernen.
Auf DOM-Ereignisse warten
Wenn Sie DOM-Ereignisse (Document Object Model) erfassen und darauf reagieren möchten, bietet v3 die statische Methode google.maps.event.addDomListener()
, die der Methode GEvent.addDomListener()
in Version 2 entspricht.
Übergebene Argumente in Ereignissen
UI-Ereignisse übergeben häufig ein Ereignisargument, auf das der Ereignis-Listener zugreifen kann. Die meisten Ereignisargumente in v3 wurden vereinfacht, damit sie gegenüber Objekten in der API konsistenter sind. Weitere Informationen finden Sie in der v3-Referenz.
In den Ereignis-Listenern von Version 3 ist kein overlay
-Argument vorhanden. Wenn Sie auf einer Karte in Version 3 ein click
-Ereignis registrieren, erfolgt der Callback nur dann, wenn der Nutzer auf die Basiskarte klickt. Sie können zusätzliche Callbacks für anklickbare Overlays registrieren, wenn Sie auf diese Klicks reagieren müssen.
// 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
});
});
Kontrollen
In der Maps JavaScript API werden UI-Steuerelemente angezeigt, über die Nutzer mit Ihrer Karte interagieren können. Mit der API lässt sich die Darstellung dieser Steuerelemente anpassen.
Änderungen an Steuerelementtypen
Einige Änderungen an den control
-Typen wurden mit der API v3 eingeführt.
- Version 3 der API unterstützt zusätzliche Kartentypen wie Geländekarten und die Möglichkeit, benutzerdefinierte Kartentypen hinzuzufügen.
- Das hierarchische V2-Steuerelement
GHierarchicalMapTypeControl
ist nicht mehr verfügbar.
Mit dem Steuerelement google.maps.MapTypeControlStyle.HORIZONTAL_BAR
können Sie einen ähnlichen Effekt erzielen.
- Das von
GMapTypeControl
in Version 2 bereitgestellte horizontale Layout ist in Version 3 nicht verfügbar.
Steuerelemente zur Karte hinzufügen
In der Maps JavaScript API Version 2 würden Sie Ihrer Karte über die Methode addControl()
des Kartenobjekts Steuerelemente hinzufügen. In v3 ändern Sie das verknüpfte MapOptions
-Objekt, anstatt direkt auf Steuerelemente zuzugreifen oder sie zu ändern. Im folgenden Beispiel sehen Sie, wie Sie die Karte anpassen und die folgenden Steuerelemente hinzufü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);
Positionierung von Steuerelementen auf der Karte
Die Positionierung von Steuerelementen wurde in v3 erheblich geändert. In Version 2 wird für die Methode addControl()
ein optionaler zweiter Parameter verwendet, 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 die Eigenschaft position
der Optionen für Steuerelemente fest. Die Positionierung dieser Steuerelemente ist nicht absolut. Stattdessen werden die Steuerelemente von der API intelligent um vorhandene Kartenelemente innerhalb der jeweiligen Einschränkungen (z. B. der Kartengröße) angeordnet.
So wird die Kompatibilität der Standardsteuerelemente mit Ihren Steuerelementen sichergestellt.
Weitere Informationen finden Sie unter Positionierung der Steuerelemente in Version 3.
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 API V2 anpassen möchten, müssen Sie eine abgeleitete Klasse der Klasse GControl
erstellen und Handler für die Methoden initialize()
und getDefaultPosition()
definieren.
In Version 3 gibt es kein Äquivalent zur Klasse GControl
. Stattdessen werden Steuerelemente als DOM-Elemente dargestellt. Wenn Sie ein benutzerdefiniertes Steuerelement mit der API v3 hinzufügen möchten, erstellen Sie eine DOM-Struktur für das Steuerelement in einem Konstruktor als untergeordnetes Element eines Node
-Elements (z.B. eines <div>
-Elements) und fügen Sie Ereignis-Listener hinzu, um DOM-Ereignisse zu verarbeiten. Übertragen Sie Node
in das controls[position]
-Array der Karte, um der Karte eine Instanz des benutzerdefinierten Steuerelements hinzuzufügen.
Bei einer HomeControl
-Klassenimplementierung, die die oben genannten Schnittstellenanforderungen erfüllt (weitere Informationen finden Sie in der Dokumentation zu benutzerdefinierten Steuerelementen), zeigen die folgenden Codebeispiele, wie Sie einer Karte ein benutzerdefiniertes Steuerelement hinzufügen.
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 stehen für Objekte, die Sie der Karte „hinzufügen“, um Punkte, Linien, Bereiche oder Objektsammlungen zu kennzeichnen.
Overlays hinzufügen und entfernen
Die Objekttypen, die durch ein Overlay dargestellt werden, sind in Version 2 und Version 3 identisch, werden aber unterschiedlich gehandhabt.
Die Overlays in der Version 2 der API wurden der Karte mit den Methoden addOverlay()
und removeOverlay()
des GMap2
-Objekts hinzugefügt und daraus entfernt. In Version 3 weisen Sie einem Overlay eine Karte über die Eigenschaft map
der zugehörigen Klasse der Overlay-Optionen 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 die Karteneigenschaft auf null
gesetzt wird, wird das Overlay entfernt.
In Version 3 gibt es keine clearOverlays()
-Methode.
Wenn Sie eine Gruppe von Overlays verwalten möchten, erstellen Sie ein Array für die Overlays. Mithilfe dieses Arrays können Sie dann setMap()
für jedes Overlay im Array aufrufen und null
übergeben, wenn Sie sie entfernen müssen.
Ziehbare Marker
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 G_DEFAULT_ICON type
erstellen und ändern. Wenn das Image 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.
Dazu setzen Sie einfach die Eigenschaft icon
der Markierung auf die URL des benutzerdefinierten Bildes und die API passt die Größe des Symbols automatisch an.
Die Maps JavaScript API unterstützt auch komplexe Symbole.
Ein komplexes Symbol kann mehrere Kacheln und komplexe Formen enthalten oder die „Stapelreihenfolge“ für die Anzeige von Bildern im Verhältnis zu anderen Overlays angeben. 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 als Option an einen GMarker
-Konstruktor übergeben. In Version 3 sollte für Symbole, die so angegeben werden, die icon
-Eigenschaften auf ein Objekt des Typs Icon
festgelegt werden.
Markerschatten werden in v3 nicht unterstützt.
In den folgenden Beispielen wird eine Strandflagge am Bondi Beach in Australien angezeigt, wobei der transparente Teil des Symbols nicht anklickbar ist:
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 und einer Folge von Liniensegmenten, die diese Orte in einer geordneten Reihenfolge verbinden.
Das Erstellen und Anzeigen eines Polyline
-Objekts in v3 ähnelt dem Erstellen und Anzeigen eines GPolyline
-Objekts in v2. In den folgenden Beispielen wird eine halbtransparente, 3 Pixel breite, geodätische Polylinie über Singapur von Zürich 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 direkte Erstellen von Polyline
-Objekten aus codierten Polylinien nicht unterstützt. Methoden zum Codieren und Decodieren von Polylinien finden Sie stattdessen in der Geometriebibliothek. Weitere Informationen zum Laden dieser Bibliothek finden Sie unter Bibliotheken in der Maps API Version 3.
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 Polygon
-Klasse von Version 3 entspricht weitgehend der Klasse GPolygon
der Version 2, mit der Ausnahme, dass Sie den Startpunkt am Ende des Pfads nicht mehr wiederholen müssen, um die Schleife zu schließen. In Version 3 der API werden alle Polygone automatisch geschlossen. Dazu wird ein Strich gezogen, der die letzte Koordinate mit der ersten Koordinate 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);
Informationen zu erweiterten Zeichenfunktionen finden Sie in der Dokumentation zu Version 3 in der Drawing-Bibliothek.
Infofenster
Ein InfoWindow
zeigt Inhalte in einem unverankerten Fenster über der Karte an. Zwischen den Info-Fenstern in v2 und v3 gibt es einige wesentliche Unterschiede:
- API V2 unterstützt nur
GInfoWindow
pro Karte, Version 3 der API mehrere, gleichzeitige InfoWindow
s auf jeder Karte.
InfoWindow
von Version 3 bleibt geöffnet, wenn Sie auf die Karte klicken. GInfoWindow
von Version 2 wird automatisch geschlossen, wenn Sie auf die Karte klicken. Sie können das V2-Verhalten emulieren, indem Sie dem Map
-Objekt einen click
-Listener hinzufügen.
- Die API V3 bietet keine native Unterstützung für
InfoWindow
mit Tabs.
Boden-Overlays
Um ein Bild auf einer Karte zu platzieren, sollten Sie ein GroundOverlay
-Objekt verwenden. Der Konstruktor für ein GroundOverlay
ist in v2 und v3 im Wesentlichen der gleiche: Er gibt die URL eines Bildes und die Begrenzungen des Bildes als Parameter an.
Im folgenden Beispiel wird eine antike Karte von Newark, NJ, als Overlay auf der Karte platziert:
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 farbige Straßenkartenkacheln verwendet. In Version 3 muss beim Erstellen eines google.maps.Map
-Objekts jedoch ein bestimmter Kartentyp angegeben werden.
Gängige Kartentypen
Die vier Basiskartentypen sind sowohl in v2 als auch in v3 verfügbar:
MapTypeId.ROADMAP
(ersetzt G_NORMAL_MAP
) zeigt die Straßenkartenansicht an.
MapTypeId.SATELLITE
(ersetzt G_SATELLITE_MAP
) zeigt Google Earth-Satellitenbilder an.
MapTypeId.HYBRID
(ersetzt G_HYBRID_MAP
) zeigt eine Mischung aus der normalen und der Satellitenansicht an.
MapTypeId.TERRAIN
(ersetzt G_PHYSICAL_MAP
) zeigt eine physische Karte an, die auf Geländeinformationen basiert.
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);
In Version 3 der Maps JavaScript API wurden auch einige Änderungen an den weniger gängigen Kartentypen vorgenommen:
- Kartenkacheln für andere Himmelskörper als die Erde sind in Version 3 der API nicht als Kartentypen verfügbar. Sie können aber wie in diesem Beispiel gezeigt als benutzerdefinierte Kartentypen aufgerufen werden.
- In Version 3 gibt es keinen speziellen Kartentyp, der den
G_SATELLITE_3D_MAP
-Typ aus Version 2 ersetzt. Stattdessen können Sie das Google Earth-Plug-in mithilfe dieser Bibliothek in Ihre Karten der Version 3 einbinden.
Maximum Zoom Imagery
Satellitenbilder sind auf großen Vergrößerungsstufen nicht immer verfügbar. Wenn Sie die höchste verfügbare Zoomstufe ermitteln möchten, bevor Sie die Zoomstufe festlegen, verwenden Sie die Klasse google.maps.MaxZoomService
. Diese Klasse ersetzt die Methode GMapType.getMaxZoomAtLatLng()
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.");
}
});
Luftbilder
Beim Aktivieren von Flugaufnahmen in Version 3 ähneln die Steuerelemente dem GLargeZoomControl3D
-Steuerelement aus Version 2. Es gibt jedoch eine zusätzliche Interstitial-Steuerung zum Drehen, die die Drehung in die unterstützten Richtungen ermöglicht.
Auf dieser Karte sehen Sie die Städte, für die derzeit 45°-Bilder verfügbar sind. Wenn 45°-Bilder verfügbar sind, wird der Satellitenschaltfläche der Maps API eine Untermenüoption hinzugefügt.
Ebenen
Ebenen sind Objekte auf der Karte, die aus einem oder mehreren Overlays bestehen. Sie können als eine Einheit bearbeitet werden und stellen im Allgemeinen Sammlungen von Objekten dar.
Unterstützte Ebenen
Die API v3 bietet Zugriff auf mehrere unterschiedliche Ebenen. Diese Ebenen überschneiden sich in den folgenden Bereichen mit der V2-Klasse GLayer
:
-
Das
KmlLayer
-Objekt rendert KML- und GeoRSS-Elemente in V3-Overlays und stellt damit das Äquivalent zur GeoXml
-Ebene der Version 2 dar.
- Das
TrafficLayer
-Objekt rendert ähnlich wie beim GTrafficOverlay
-Overlay der Version 2 eine Ebene mit Informationen zur Verkehrslage.
Diese Ebenen weisen Unterschiede zu v2 auf, Die Unterschiede werden unten beschrieben. Um sie einer Karte hinzuzufügen, rufen Sie setMap()
auf und übergeben das Map
-Objekt, 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 einbinden möchten. In Version 3 werden diese Datenformate mit einer Instanz von KmlLayer
angezeigt, die das GGeoXml
-Objekt aus Version 2 ersetzt.
Die API v3 bietet mehr Flexibilität beim Rendern von KML-Dateien, da Sie InfoWindows unterdrücken und die Klickantwort ändern können. Weitere Details finden Sie in der Dokumentation KML- und GeoRSS-Ebenen für Version 3.
Beim Rendern von KmlLayer
gelten Beschränkungen für Größe und Komplexität. Weitere Informationen finden Sie in der KmlLayer-Dokumentation.
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);
Traffic-Ebene
In Version 3 kannst du mithilfe des TrafficLayer
-Objekts Verkehrsinformationen in Echtzeit (sofern unterstützt) in deine Karten einfügen. Die Verkehrsinformationen werden für den Zeitpunkt der Anfrage bereitgestellt. Diese Beispiele zeigen die Verkehrsinformationen für Los Angeles:
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 v2 gibt es in v3 keine Optionen für den TrafficLayer
-Konstruktor. Verkehrsbehinderungen sind in v3 nicht verfügbar.
Dienste
Geocoding
Die Maps JavaScript API bietet ein geocoder
-Objekt, mit dem Adressen aus Nutzereingaben dynamisch geocodiert werden können. Wenn Sie statische, bekannte Adressen geocodieren möchten, finden Sie entsprechende Informationen in der Dokumentation zur Geocoding API.
Die Geocoding API wurde erheblich aktualisiert und verbessert. Durch neue Funktionen und Änderungen an der Darstellung von Daten wurde die Darstellung von Daten verändert.
GClientGeocoder
in der API V2 bietet zwei verschiedene Methoden für die Vorwärts- und umgekehrte Geocodierung sowie zusätzliche Methoden, um die Durchführung der Geocodierung zu beeinflussen. Im Gegensatz dazu bietet das Geocoder
-Objekt von Version 3 nur eine geocode()
-Methode, die ein Objektliteral mit den Eingabebedingungen (in Form eines Objekts für Geocoding-Anfragen) und einer Callback-Methode enthält. Je nachdem, ob die Anfrage ein address
-Textattribut oder ein LatLng
-Objekt enthält, gibt die Geocoding API eine Antwort für die umgekehrte oder umgekehrte Geocodierung zurück. Sie können die Durchführung des Geocodings beeinflussen, indem Sie zusätzliche Felder an die Geocoding-Anfrage übergeben:
- Wenn Sie eine
address
in Textform angeben, wird die Geocodierung des Vorwärts-Geocodings ausgelöst, was dem Aufrufen der getLatLng()
-Methode entspricht.
- Das Einfügen eines
latLng
-Objekts löst die umgekehrte Geocodierung aus, was dem Aufrufen der getLocations()
-Methode entspricht.
- Mit dem Attribut
bounds
wird die Gewichtung des Darstellungsbereichs aktiviert, was dem Aufrufen der Methode setViewport()
entspricht.
- Mit dem Attribut
region
wird die Gewichtung des Regionscodes aktiviert, was dem Aufrufen der Methode setBaseCountryCode()
entspricht.
Geocoding-Antworten in Version 3 unterscheiden sich stark von den Antworten in Version 2. Die API V3 ersetzt die verschachtelte Struktur von Version 2 durch eine flachere Struktur, die leichter zu parsen ist. Außerdem sind V3-Antworten detaillierter: Jedes Ergebnis hat mehrere Adresskomponenten, mit denen sich die Auflösung der einzelnen Ergebnisse besser nachvollziehen lässt.
Der folgende Code verwendet eine Adresse in Textform und zeigt das erste Ergebnis des Geocodings dieser Adresse an:
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 Version 3 der Maps JavaScript API wird die Klasse GDirections
aus Version 2 zum Berechnen von Routen durch die Klasse DirectionsService
ersetzt.
Die Methode route()
in Version 3 ersetzt die Methoden load()
und loadFromWaypoints()
der API V2. Diese Methode verwendet ein einzelnes DirectionsRequest
-Objektliteral, das die Eingabebedingungen und eine Callback-Methode enthält, die nach Erhalt der Antwort ausgeführt wird. In diesem Objektliteral können ähnlich wie beim GDirectionsOptions
-Objektliteral in Version 2 Optionen angegeben werden.
In Version 3 der Maps JavaScript API wurde das Senden von Routenanfragen von der Aufgabe zum Rendern von Anfragen getrennt. Letztere wird jetzt mit der Klasse DirectionsRenderer
ausgeführt. Über die Methoden setMap()
und setDirections()
können Sie ein DirectionsRenderer
-Objekt mit einer beliebigen Karte oder einem DirectionsResult
-Objekt verknüpfen. Da der Renderer ein MVCObject
ist, erkennt er Änderungen an seinen Eigenschaften und aktualisiert die Karte, wenn sich die zugewiesenen Routen geändert haben.
Mit dem folgenden Code wird veranschaulicht, wie Sie Fußgängerrouten zu einem bestimmten Ort über Fußgängerwege von einer Adresse aus anfordern. Beachten Sie, dass nur in v3 Fußgängerrouten für Fußgängerwege im Dublin's Zoo zur Verfügung stehen.
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°-Ansichten von bestimmten Orten innerhalb des Abdeckungsbereichs. Im Gegensatz zur API-Version 2, für die zur Anzeige von Street View-Bildern das Flash®-Plug-in erforderlich war, wird die API von Version 3 im Browser unterstützt.
Street View-Bilder werden durch das StreetViewPanorama
-Objekt in Version 3 oder das GStreetviewPanorama
-Objekt in Version 2 unterstützt. Diese Klassen haben unterschiedliche Schnittstellen, aber sie spielen dieselbe Rolle: Sie verbinden den div
-Container mit den Street View-Bildern und ermöglichen es Ihnen, die Position und den Blickwinkel (POV) 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 Schnittstellen zum Abrufen oder Überprü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 div-Element der Karte erneut, um Street View-Panoramen anzuzeigen. Der folgende Code zeigt, wie das V2-Verhalten emuliert wird, indem die Street View-Panoramen in ein separates div-Element aufgeteilt 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);
}