Die Maps JavaScript API Version 2 ist seit dem 26. Mai 2021 nicht mehr verfügbar. Aus diesem Grund funktionieren die Karten aus Version 2 Ihrer Website 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.
Übersicht
Jede Anwendung hat einen etwas anderen Migrationsprozess. Es gibt jedoch einige Schritte, die für alle Projekte gelten:
- Neuen Schlüssel anfordern Die Maps JavaScript API wird jetzt mit der Google Cloud Console zum Verwalten von Schlüsseln verwendet. Wenn Sie noch einen V2-Schlüssel verwenden, sollten Sie vor Beginn der Migration Ihren neuen API-Schlüssel abrufen.
- Aktualisieren Sie Ihr API-Bootstrap. In den meisten Anwendungen wird die Maps JavaScript API Version 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äufigsten Änderungen gehören:
- Verweisen Sie immer auf den Namespace „google.maps“. In Version 3 wird der gesamte Maps JavaScript API-Code im
google.maps.*
-Namespace und nicht im globalen Namespace gespeichert. Die meisten Objekte wurden im Rahmen dieses Vorgangs ebenfalls umbenannt. Statt GMap2
laden Sie jetzt google.maps.Map
.
- Entfernen Sie alle Verweise auf veraltete Methoden. Es wurden eine Reihe von allgemeinen Hilfsmethoden entfernt, z. B.
GDownloadURL
und GLog
.
Ersetzen Sie diese Funktion entweder durch Drittanbieter-Dienstprogrammbibliotheken oder entfernen Sie diese Verweise aus Ihrem Code.
- Optional: Fügen Sie Ihrem Code Bibliotheken hinzu. Viele Features wurden in Dienstprogrammbibliotheken verlagert, sodass jede Anwendung nur die Teile der API laden muss, die verwendet werden.
- Optional: Konfigurieren Sie Ihr Projekt für die Verwendung der externen Funktionen von Version 3.
Mit den externen Funktionen von Version 3 können Sie Ihren Code mit dem Closure Compiler überprüfen oder die automatische Vervollständigung in Ihrer IDE auslösen.
Weitere Informationen finden Sie unter Erweiterte Zusammensetzung und externe Daten.
- Testen und wiederholen. An diesem Punkt gibt es noch einiges zu tun. Die gute Nachricht ist jedoch, dass du auf dem Weg zu deiner neuen Maps-Anwendung für Version 3 bist.
Änderungen in Version 3 der Maps JavaScript API
Bevor Sie die Migration planen, sollten Sie sich mit den Unterschieden zwischen Version 2 der Maps JavaScript API und Version 3 vertraut machen. Die neueste Version der Maps JavaScript API wurde von Grund auf neu geschrieben. Der Schwerpunkt liegt dabei auf modernen JavaScript-Programmiertechniken, einer verstärkten Nutzung von Bibliotheken und einer vereinfachten API.
Der API wurden viele neue Features hinzugefügt und einige bekannte Features wurden geändert oder sogar entfernt. In diesem Abschnitt werden einige der wichtigsten Unterschiede zwischen den beiden Releases vorgestellt.
Die API v3 umfasst folgende Änderungen:
- Eine optimierte Kernbibliothek. Viele der ergänzenden Funktionen wurden in Bibliotheken verschoben, wodurch die Lade- und Parsing-Zeiten für die Core API verkürzt werden. So können Karten auf jedem Gerät schnell geladen werden.
- Verbesserte Leistung verschiedener Funktionen, z. B. Polygon-Rendering und Markierungspositionierung.
- Ein neuer Ansatz für clientseitige Nutzungslimits, um gemeinsame Adressen besser zu berücksichtigen, die von mobilen Proxys und Unternehmensfirewalls verwendet werden.
- Mehrere moderne Browser und mobile Browser werden jetzt unterstützt. Internet Explorer 6 wird nicht mehr unterstützt.
- Viele allgemeine Hilfsklassen (
GLog
oder GDownloadUrl
) wurden entfernt. Es gibt heute 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.
- Mit benutzerdefinierten Street View-Panoramen und eigenen Fotos 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 mehrerer neuer Dienste wie ElevationService und Distance Matrix
- Ein verbesserter Routenplanerdienst bietet alternative Routen, Routenoptimierungen (ungefähre Lösungen für das Problem der Vertriebsmitarbeiter von Reisen), Fahrradrouten (mit Fahrradebene), Routen für öffentliche Verkehrsmittel und ziehbare Routen.
- Ein aktualisiertes Geocoding-Format, das genauere type-Informationen als der
accuracy
-Wert aus der Geocoding API Version 2 liefert.
- Unterstützung mehrerer Infofenster auf einer Karte
Ihr neuer Schlüssel
Version 3 der Maps JavaScript API verwendet ein neues Schlüsselsystem. Möglicherweise verwenden Sie bereits einen Schlüssel aus Version 3 für Ihre Anwendung. In diesem Fall ist keine Änderung erforderlich. Um dies zu überprüfen, prüfen Sie die URL, von der aus Sie die Maps JavaScript API laden, auf den Parameter key
. Wenn der Schlüssel/Wert mit 'ABQIAA' beginnt, verwenden Sie einen V2-Schlüssel. Wenn Sie einen Schlüssel aus Version 2 haben, müssen Sie im Rahmen der Migration ein Upgrade auf einen Schlüssel mit Version 3 durchführen. Das hat folgende Auswirkungen:
Der Schlüssel wird beim Laden der Maps JavaScript API Version 3 übergeben.
Weitere Informationen zum Generieren von API-Schlüsseln
Wenn Sie Google Maps APIs for Work-Kunde sind, verwenden Sie möglicherweise eine Client-ID mit dem Parameter client
anstelle des Parameters key
. Client-IDs werden weiterhin in Maps JavaScript API Version 3 unterstützt und müssen den Schlüsselaktualisierungsprozess nicht durchlaufen.
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 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 v3. Kunden von Google Maps APIs for Work sollten den Parameter client
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 zuletzt veröffentlichte Version anzufordern, oder ändern Sie den Wert entsprechend dem Schema der Version 3.
- Optional: Ersetzen Sie den Parameter
hl
durch language
und behalten Sie seinen Wert bei.
- Optional: Fügen Sie den Parameter
libraries
hinzu, um optionale Bibliotheken zu laden.
Im einfachsten Fall gibt der Bootstrap von Version 3 nur den 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 wohl auffälligste Änderung in der Maps JavaScript API Version 3 ist die Einführung des Namespace google.maps
. Die API V2 platziert standardmäßig alle Objekte im globalen Namespace, was zu Namenskonflikten führen kann. In Version 3 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 nutzen. Leider funktioniert das Suchen nach " und das Ersetzen durch "google.maps." nicht vollständig. Es empfiehlt sich jedoch, beim Überprüfen Ihres Codes die entsprechende Faustregel anzuwenden. Im Folgenden finden Sie einige Beispiele für die entsprechenden 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
Version 3 der Maps JavaScript API weist für die meisten Funktionen in Version 2 Parallelen auf. 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 dem 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 Parallele:
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 den APIs von Version 2 und Version 3 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 v3 nicht mehr erforderlich und wurden aus der API entfernt.
- Das Objekt
GMap2
wird durch google.maps.Map
als zentrales Objekt in der API ersetzt.
- Eigenschaften werden jetzt über die Optionenklassen geladen. Im obigen Beispiel haben wir die drei Properties festgelegt, die zum Laden einer Karte erforderlich sind –
center
, zoom
und mapTypeId
– über ein Inline-Objekt MapOptions
.
- Die Standardbenutzeroberfläche ist in v3 aktiviert. Wenn du dies deaktivieren möchtest, setze die Property
disableDefaultUI
im Objekt MapOptions
auf „true“.
Zusammenfassung
An dieser Stelle werden Ihnen einige der wichtigsten Punkte bei der Migration von Version 2 zu Version 3 der Maps JavaScript API vorgestellt.
Möglicherweise gibt es weitere Informationen, die jedoch von Ihrer Anwendung abhängen. In den folgenden Abschnitten finden Sie eine Anleitung zur Migration für bestimmte Fälle, die auftreten können. Außerdem gibt es einige Ressourcen, die während des Upgrades hilfreich sein können.
Wenn du Probleme oder Fragen zu diesem Artikel hast, klicke oben auf der Seite auf den Link Feedback senden.
Dieser Abschnitt enthält 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 wird. Wir empfehlen, diese Referenz nicht vollständig zu lesen. Nutzen Sie stattdessen dieses Material, um Ihre Migration von Fall zu Fall zu unterstützen.
- Ereignisse: Ereignisse registrieren und behandeln
- Steuerelemente: Mit den Steuerelementen lassen sich die auf der Karte angezeigten Navigationsbedienelemente bearbeiten.
- 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 Verkehrslagenebenen.
- Dienste: Geocoding-, Routen- oder Street View-Dienste von Google
Ereignisse
Das Ereignismodell für die Maps JavaScript API Version 3 ähnelt dem, das in Version 2 verwendet wurde, auch wenn hinter den Kulissen viel verändert wurde.
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. „click“-Mausereignisse werden vom DOM an die Maps JavaScript API weitergegeben. Diese Ereignisse sind unabhängig von den standardmäßigen DOM-Ereignissen.
- Benachrichtigungen über MVC-Statusänderungen geben Aufschluss über Änderungen an Google Maps API-Objekten und werden entsprechend der
property_changed
-Konvention benannt.
Mit jedem Maps API-Objekt wird eine Anzahl benannter Ereignisse exportiert. Anwendungen, die sich für bestimmte Ereignisse interessieren, sollten Ereignis-Listener für diese Ereignisse registrieren und Code ausführen, wenn diese Ereignisse empfangen werden. Dieser ereignisgesteuerte Mechanismus ist in Version 2 und 3 der Maps JavaScript API identisch. Der einzige Unterschied besteht darin, dass der Namespace von GEvent
zu 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.');
});
Ereignislistener entfernen
Aus Leistungsgründen ist es am besten, einen Ereignis-Listener zu entfernen, wenn er nicht mehr benötigt wird. Das Entfernen eines Ereignis-Listeners funktioniert in v2 und v3 auf dieselbe Weise:
- Wenn Sie einen Ereignis-Listener erstellen, wird ein intransparentes Objekt zurückgegeben (GEventListener in Version 2, MapsEventListener in Version 3).
- Wenn Sie den Ereignis-Listener entfernen möchten, übergeben Sie dieses Objekt an die Methode
removeListener()
(GEvent.removeListener()
in v2 oder google.maps.event.removeListener()
in v3), um den Ereignis-Listener zu entfernen.
Reaktionen auf DOM-Ereignisse
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
UI-Ereignisse übergeben häufig ein Ereignisargument, auf das der Ereignis-Listener zugreifen kann. Die meisten Ereignisargumente in Version 3 wurden vereinfacht, um Objekte in der API einheitlicher zu machen. Weitere Informationen finden Sie in der V3-Referenz.
In v3-Ereignis-Listenern ist kein Argument overlay
vorhanden. Wenn du ein click
-Ereignis auf einer v3-Karte registrierst, erfolgt der Callback nur, wenn der Nutzer auf die Basiskarte klickt. Du kannst zusätzliche Callbacks für anklickbare Overlays registrieren, wenn du auf diese Klicks reagieren musst.
// 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
});
});
Steuerelemente
Die Maps JavaScript API enthält UI-Steuerelemente, über die Nutzer mit Ihrer Karte interagieren können. Mit der API können Sie die Darstellung dieser Steuerelemente anpassen.
Änderungen an Steuerelementtypen
In der API V3 wurden einige Änderungen an control
-Typen eingeführt.
- Die API v3 unterstützt zusätzliche Kartentypen, einschließlich Geländekarten und die Möglichkeit, benutzerdefinierte Kartentypen hinzuzufügen.
- Das hierarchische Steuerelement V2 (
GHierarchicalMapTypeControl
) ist nicht mehr verfügbar.
Einen ähnlichen Effekt erzielen Sie mit dem Steuerelement google.maps.MapTypeControlStyle.HORIZONTAL_BAR
.
- Das horizontale Layout von
GMapTypeControl
in Version 2 ist in Version 3 nicht verfügbar.
Steuerelemente zur Karte hinzufügen
Mit der Maps JavaScript API Version 2 kannst du deiner Karte Steuerelemente hinzufügen, die über die Methode addControl()
deines Kartenobjekts ausgeführt werden. In Version 3 ändern Sie das verknüpfte MapOptions
-Objekt, anstatt direkt auf Steuerelemente zuzugreifen oder diese zu ändern. 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);
Positionierung von Steuerelementen auf der Karte
Die Positionierung von Steuerelementen wurde in v3 erheblich geändert. In Version 2 verwendet die Methode addControl()
einen optionalen zweiten Parameter, mit dem Sie die Position des Steuerelements in Bezug auf die Ecken der Karte festlegen können.
In v3 legen Sie die Position eines Steuerelements über das Attribut position
der Steuerelementoptionen fest. Die Positionierung der Steuerelemente ist nicht absolut. Stattdessen werden die Steuerelemente von der API intelligent mithilfe der fließenden Elemente innerhalb vorhandener Einschränkungen wie der Kartengröße angeordnet.
So wird die Kompatibilität der Standardsteuerelemente mit Ihren Steuerelementen sichergestellt.
Weitere Informationen finden Sie unter Steuerung der Positionierung in v3.
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.
Zum Anpassen der Steuerelemente mit der API V2 würden Sie die Klasse GControl
erstellen und Handler für die Methoden initialize()
und getDefaultPosition()
definieren.
In Version 3 gibt es keine Entsprechung für die Klasse GControl
. Stattdessen werden Steuerelemente als DOM-Elemente dargestellt. Zum Hinzufügen eines benutzerdefinierten Steuerelements mit der v3 API erstellen Sie eine DOM-Struktur für das Steuerelement in einem Konstruktor als untergeordnetes Element eines Node
(z.B. ein <div>
-Element) und fügen Ereignis-Listener zum Verarbeiten von DOM-Ereignissen hinzu. Übertragen Sie Node
in das Maps-Array controls[position]
, 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 spiegeln Objekte wider, die Sie der Karte hinzufügen, um Punkte, Linien, Bereiche oder Objektsammlungen zu kennzeichnen.
Overlays hinzufügen und entfernen
Die durch ein Overlay dargestellten Objekttypen sind in v2 und v3 identisch. Sie werden jedoch anders behandelt.
Overlays in der v2 API wurden mit den Methoden addOverlay()
und removeOverlay()
des Objekts GMap2
zur Karte hinzugefügt und daraus entfernt. In Version 3 weisen Sie eine Karte über die Property map
der zugehörigen Overlay-Optionsklasse einem Overlay zu.
Du kannst ein Overlay auch direkt hinzufügen oder entfernen. Rufe dazu die Methode setMap()
des Overlay-Objekts auf und gib die gewünschte Karte an. Wenn das Kartenattribut auf null
gesetzt ist, wird das Overlay entfernt.
In Version 3 ist keine clearOverlays()
-Methode vorhanden.
Wenn Sie eine Gruppe von Overlays verwalten möchten, sollten Sie ein Array erstellen, das die Overlays enthält. Mit diesem Array können Sie dann setMap()
für jedes Overlay im Array aufrufen und null
übergeben, wenn Sie es entfernen möchten.
Ziehbare Marker
Marker sind standardmäßig klickbar, aber nicht ziehbar. In den folgenden beiden Beispielen wird eine dragbare 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 in Version 2 ein benutzerdefiniertes Image verwenden möchten, können Sie eine GIcon
-Instanz aus G_DEFAULT_ICON type
erstellen und ändern. Wenn das 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 icon
-Property der Markierung auf die URL Ihres benutzerdefinierten Bilds fest 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 umfassen oder angeben, wie die Bilder im Verhältnis zu anderen Overlays angezeigt werden sollen. Wenn Sie einer Markierung in Version 2 eine Form hinzufügen möchten, müssen Sie das zusätzliche Attribut in jeder GIcon
-Instanz angeben und diese als Option an einen GMarker
-Konstruktor übergeben. In v3 sollten auf diese Weise angegebene Symbole ihre icon
-Eigenschaften auf ein Objekt des Typs Icon
gesetzt werden.
Markerschatten werden in v3 nicht unterstützt.
Die folgenden Beispiele zeigen eine Strandflagge am Bondi Beach in Australien, 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 Reihe von Liniensegmenten, die diese Orte in einer geordneten Reihenfolge miteinander verbinden.
Das Erstellen und Anzeigen eines Polyline
-Objekts in v3 ähnelt dem Verwenden eines GPolyline
-Objekts in v2. In den folgenden Beispielen wird eine halbtransparente, 3 Pixel breite, geodätische Polylinie von Zürich nach Sydney über Singapur 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 Version 3.
In den folgenden Beispielen wird dieselbe codierte Polylinie dargestellt. Der v3-Code verwendet die Methode decodePath()
aus dem Namespace google.maps.geometry.encoding
.
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 Objekt Polyline
bestehen Polygon
-Objekte aus einer Reihe von Punkten in einer geordneten Reihenfolge. Die Polygon
-Klasse von v3 entspricht weitgehend der GPolygon
-Klasse von v2. Die einzige Ausnahme ist, dass Sie den Eckpunkt am Ende des Pfads nicht mehr wiederholen müssen, um die Schleife zu schließen. Die v3 API schließt automatisch alle Polygone, indem ein Strich gezogen wird, 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);
Weitere Funktionen zum Zeichnen finden Sie in der v3-Dokumentation unter Zeichnungsbibliothek.
Infofenster
Mit InfoWindow
werden Inhalte in einem unverankerten Fenster über der Karte angezeigt. Zwischen den Info-Fenstern in v2 und v3 gibt es einige wesentliche Unterschiede:
- Die API v2 unterstützt nur
GInfoWindow
pro Karte, während die API v3 mehrere gleichzeitige InfoWindow
s auf jeder Karte unterstützt.
- Die Version 3 von
InfoWindow
bleibt geöffnet, wenn du auf die Karte klickst. Die Version 2 von GInfoWindow
wird automatisch geschlossen, wenn du auf die Karte klickst. Sie können das Verhalten von V2 emulieren. Fügen Sie dazu einen click
-Listener für das Objekt Map
hinzu.
- Die API v3 bietet keine native Unterstützung für
InfoWindow
mit Tabs.
Boden-Overlays
Verwenden Sie ein GroundOverlay
-Objekt, um ein Bild auf einer Karte zu platzieren. Der Konstruktor für ein GroundOverlay
-Element ist in v2 und v3 im Wesentlichen identisch. Er gibt als Parameter die URL eines Bildes und die Grenzen des Bildes 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 v2 und v3 verfügbaren Kartentypen unterscheiden sich geringfügig, aber alle grundlegenden Kartentypen sind in beiden Versionen der API verfügbar. In v2 werden standardmäßig die standardmäßigen Straßenkartenkacheln verwendet. In Version 3 ist beim Erstellen eines google.maps.Map
-Objekts jedoch ein bestimmter Kartentyp erforderlich.
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ßenansicht 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.
MapTypeId.TERRAIN
(ersetzt G_PHYSICAL_MAP
)
zeigt eine physische Karte basierend auf Geländeinformationen.
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 der Maps JavaScript API Version 3 wurden außerdem einige Änderungen an den weniger gängigen Kartentypen vorgenommen:
- Kartenkacheln für andere Himmelskörper als Google Earth sind in der API Version 3 nicht als Kartentypen verfügbar. Sie können aber wie in diesem Beispiel als benutzerdefinierte Kartentypen aufgerufen werden.
- In Version 3 gibt es keinen speziellen Kartentyp, der den Typ
G_SATELLITE_3D_MAP
von Version 2 ersetzt. Stattdessen können Sie das Google Earth-Plug-in mit dieser Bibliothek in Ihre v3-Karten einbinden.
Maximale Bildvergrößerung
Satellitenbilder sind auf großen Vergrößerungsstufen nicht immer verfügbar. Wenn Sie die höchste verfügbare Zoomstufe wissen möchten, bevor Sie die Zoomstufe festlegen, verwenden Sie die Klasse google.maps.MaxZoomService
. Diese Klasse ersetzt die Methode GMapType.getMaxZoomAtLatLng()
aus v2.
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
Wenn Sie die Luftaufnahmen in Version 3 aktivieren, ähneln die Steuerelemente dem Steuerelement GLargeZoomControl3D
in Version 2. Zusätzlich gibt es ein Steuerelement zum Drehen von Interstitials, mit dem Sie die Kamera in die unterstützten Richtungen drehen können.
Auf dieser Karte kannst du sehen, in welchen Städten 45°-Bilder verfügbar sind. Wenn 45°-Bilder verfügbar sind, wird der Satelliten-Schaltflä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 mit der GLayer
-Klasse in den folgenden Bereichen:
-
Das
KmlLayer
-Objekt rendert KML- und GeoRSS-Elemente in v3-Overlays und stellt die Entsprechung für die v2-GeoXml
-Ebene dar.
- Das
TrafficLayer
-Objekt rendert eine Ebene, die die Verkehrslage darstellt, ähnlich wie das GTrafficOverlay
-Overlay von Version 2.
Diese Ebenen weisen Unterschiede zu v2 auf, Die Unterschiede werden unten beschrieben. Sie können der Karte hinzugefügt werden, indem Sie setMap()
aufrufen und das Objekt Map
übergeben, auf dem die Ebene angezeigt 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 mithilfe einer Instanz von KmlLayer
angezeigt, die das Objekt GGeoXml
aus Version 2 ersetzt.
Die V3 API ist beim Rendern von KML flexibler, 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 Größen- und Komplexitätsbeschränkungen. Weitere Informationen findest du 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 können Sie mithilfe des TrafficLayer
-Objekts zu Ihren Karten Verkehrsinformationen in Echtzeit hinzufügen, sofern diese unterstützt werden. Verkehrsinformationen werden für den Zeitpunkt bereitgestellt, an dem die Anfrage gestellt wurde. 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 Version 2 gibt es in Version 3 keine Optionen für den Konstruktor TrafficLayer
. Verkehrsbehinderungen sind in v3 nicht verfügbar.
Dienste
Geocoding
Die Maps JavaScript API bietet ein geocoder
-Objekt zum dynamischen Geocoding von Adressen aus Nutzereingaben. Informationen zum Geocoding statischer, bekannter Adressen finden Sie in der Geocoding API-Dokumentation.
Die Geocoding API wurde erheblich erweitert und verbessert. Es wurden neue Funktionen hinzugefügt und die Darstellung der Daten wurde geändert.
GClientGeocoder
in der API V2 bietet zwei verschiedene Methoden für die Vorwärts- und umgekehrte Geocodierung sowie zusätzliche Methoden, die Einfluss auf die Geocoding-Methode haben. Im Gegensatz dazu bietet das Geocoder
-Objekt in Version 3 nur die Methode geocode()
, die ein Objekt-Literal mit den Eingabebedingungen (in Form eines Geocoding-Anfrageobjekts) 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 vorwärts- oder umgekehrte Geocoding-Antwort zurück. Sie können die Funktionsweise des Geocoding beeinflussen, indem Sie zusätzliche Felder an die Geocoding-Anfrage übergeben:
- Das Einbeziehen eines textbasierten
address
löst das Vorwärts-Geocoding aus, was dem Aufruf der Methode getLatLng()
entspricht.
- Durch das Einbinden eines
latLng
-Objekts wird das umgekehrte Geocoding ausgelöst, was dem Aufruf der Methode getLocations()
entspricht.
- Durch das Einbinden des
bounds
-Attributs wird die Gewichtung des Darstellungsbereichs aktiviert, was dem Aufruf der Methode setViewport()
entspricht.
- Durch das Einbinden des Attributs
region
wird die Gewichtung der Regionscodes aktiviert, was dem Aufruf der Methode setBaseCountryCode()
entspricht.
Geocoding-Antworten in v3 unterscheiden sich stark von den v2-Antworten. Die API V3 ersetzt die verschachtelte Struktur, die in Version 2 verwendet wird, durch eine flachere Struktur, die leichter geparst werden kann. Außerdem sind V3-Antworten detaillierter: Jedes Ergebnis enthält mehrere Adresskomponenten, die eine bessere Vorstellung von der Auflösung jedes Ergebnisses vermitteln.
Im folgenden Code wird eine Textadresse verwendet und das erste Ergebnis der Geocodierung dafür 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
Die Maps JavaScript API Version 3 ersetzt die Klasse GDirections
aus Version 2 durch die Klasse DirectionsService
für die Berechnung von Wegbeschreibungen.
Die Methode route()
in Version 3 ersetzt sowohl die Methode load()
als auch die Methode loadFromWaypoints()
aus 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 werden soll. In diesem Objekt-Literal können Optionen angegeben werden, ähnlich wie das GDirectionsOptions
-Objekt-Literal in Version 2.
In der Maps JavaScript API Version 3 wurde die Aufgabe zum Senden von Wegbeschreibungsanfragen von der Aufgabe zum Rendern von Anfragen getrennt, die jetzt mit der Klasse DirectionsRenderer
verarbeitet wird. Du kannst ein DirectionsRenderer
-Objekt über die Methoden setMap()
und setDirections()
mit jeder 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 zugehörigen Wegbeschreibungen geändert haben.
Der folgende Code zeigt, wie Fußgängerrouten zu einem bestimmten Ort mithilfe von Fußwegen von einer Adresse angefordert werden können. Hinweis: Nur in Version 3 können Fußgängerwege im Dubliner Zoo bereitgestellt werden.
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 ausgewiesenen Orten innerhalb des Abdeckungsbereichs. Im Gegensatz zu Version 2, für die das Flash®-Plug-in zum Anzeigen von Street View-Bildern erforderlich war, unterstützt die API Version 3 Street View-Objekte nativ im Browser.
Street View-Bilder werden durch die Verwendung des StreetViewPanorama
-Objekts in Version 3 oder des GStreetviewPanorama
-Objekts in Version 2 unterstützt. Diese Klassen haben unterschiedliche Oberflächen, spielen aber dieselbe Rolle: Sie verbinden den div
-Container mit den Street View-Bildern und geben den Ort und den Blickwinkel (Street View) des Street View-Panoramas an.
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);
}
Direkter Zugriff auf Street View-Daten ist über das Objekt StreetViewService
in Version 3 oder das Objekt GStreetviewClient
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 Karten-Div für die Anzeige von Street View-Panoramen. Der folgende Code zeigt, wie das Verhalten von V2 emuliert wird, indem die Street View-Panoramen in ein separates div-Element unterteilt 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);
}