Tutorial: Ermitteln und Anzeigen von Routen für verschiedene Reisemodi mithilfe von Azure Maps
In diesem Tutorial erfahren Sie, wie Sie den Routendienst und das Kartensteuerelement von Azure Maps verwenden, um Wegbeschreibungen für private Fahrzeuge sowie für Nutzfahrzeuge (Lkw) mit dem Frachttyp USHazmatClass2
anzuzeigen.
In diesem Tutorial lernen Sie Folgendes:
- Erstellen und Anzeigen des Kartensteuerelements auf einer Webseite
- Rendern von Echtzeitverkehrsdaten auf einer Karte
- Anfordern und Anzeigen von PKW- und LKW-Routen auf einer Karte
Voraussetzungen
- Ein Azure Maps-Konto
- Ein Abonnementschlüssel
Hinweis
Weitere Informationen zur Authentifizierung in Azure Maps finden Sie unter Verwalten der Authentifizierung in Azure Maps.
Erstellen einer neuen Webseite mit der Kartensteuerelement-API
In den folgenden Schritten wird gezeigt, wie Sie das Kartensteuerelement erstellen und auf einer Webseite anzeigen.
Erstellen Sie auf dem lokalen Computer eine neue Datei, und nennen Sie sie MapTruckRoute.html.
Fügen Sie der Datei den folgenden HTML-Code hinzu:
<!DOCTYPE html> <html> <head> <title>Map Route</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Add references to the Azure Maps Map control JavaScript and CSS files. --> <link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css" type="text/css"> <script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js"></script> <script> var map, datasource, client; function GetMap() { //Add Map Control JavaScript code here. } </script> <style> html, body { width: 100%; height: 100%; padding: 0; margin: 0; } #myMap { width: 100%; height: 100%; } </style> </head> <body onload="GetMap()"> <div id="myMap"></div> </body> </html>
Dies sind einige Hinweise zum HTML-Code:
- Der HTML-Header enthält die CSS- und JavaScript-Ressourcendateien, die von der Bibliothek der Azure-Kartensteuerelemente gehostet werden.
- Das Ereignis
onload
im Textkörper der Seite ruft die FunktionGetMap
auf, wenn der Textkörper der Seite geladen wurde. - Die Funktion
GetMap
enthält den JavaScript-Inlinecode, der für den Zugriff auf die Azure Maps-APIs genutzt wird.
Fügen Sie der
GetMap
-Funktion als Nächstes den folgenden JavaScript-Code direkt unter dem Code hinzu, der im letzten Schritt hinzugefügt wurde. Dieser Code erstellt ein Kartensteuerelement und initialisiert es mithilfe der Azure Maps-Abonnementschlüssel, die Sie bereitstellen. Stellen Sie sicher, dass Sie die Zeichenfolge<Your Azure Maps Subscription Key>
durch den Azure Maps-Abonnementschlüssel ersetzen, den Sie aus Ihrem Maps-Konto kopiert haben.//Instantiate a map object var map = new atlas.Map("myMap", { // Replace <Your Azure Maps Subscription Key> with your Azure Maps subscription key. https://aka.ms/am-primaryKey authOptions: { authType: 'subscriptionKey', subscriptionKey: '<Your Azure Maps Subscription Key>' } });
Einige Hinweise zu JavaScript:
- Dieser Code ist das Herzstück der
GetMap
-Funktion, mit der die Kartensteuerelement-API für Ihr Azure Maps-Konto initialisiert wird. - atlas ist der Namespace, der die Azure Maps-API und die zugehörigen visuellen Komponenten enthält.
- atlas.Map stellt das Steuerelement für ein visuelles Element und eine interaktive Webkarte bereit.
- Dieser Code ist das Herzstück der
Speichern Sie die Datei, und öffnen Sie sie im Browser. Der Browser zeigt eine einfache Karte an, indem
atlas.Map
über Ihren Azure Maps-Abonnementschlüssel aufgerufen wird.
Rendern von Echtzeitverkehrsdaten auf einer Karte
Fügen Sie in der Funktion
GetMap
nach der Karteninitialisierung den folgenden JavaScript-Code hinzu: Dieser Code implementiert denready
-Ereignishandler des Kartensteuerelements.map.events.add("ready", function() { // Add Traffic Flow to the Map map.setTraffic({ flow: "relative" }); });
Einige Hinweise zu JavaScript:
- Dieser Code implementiert den
ready
-Ereignishandler des Kartensteuerelements. Der restliche Code in diesem Tutorial wird in den Ereignishandlerready
eingefügt. - Im Kartenereignishandler
ready
ist die Verkehrsflusseinstellung für die Karte aufrelative
(Geschwindigkeit der Straße relativ zum freien Fluss) festgelegt. - Weitere Datenverkehrsoptionen finden Sie unter TrafficOptions-Schnittstelle.
- Dieser Code implementiert den
Speichern Sie die Datei MapTruckRoute.html, und aktualisieren Sie die Seite in Ihrem Browser. Wenn Sie eine beliebige Stadt vergrößern (beispielsweise Los Angeles), werden die Straßen mit den aktuellen Verkehrsdaten angezeigt.
Definieren des Renderns von Routenanzeigen
In diesem Tutorial werden zwei Routen auf der Karte berechnet. Die erste Route wird für ein privates Fahrzeug (Pkw) berechnet. Die zweite Route wird für ein Nutzfahrzeug (Lkw) berechnet, um den Unterschied zwischen den Ergebnissen zu veranschaulichen. Nach dem Rendern werden auf der Karte ein Symbol für den Start- und Endpunkt der Route sowie verschiedenfarbige Routenliniengeometrien für den jeweiligen Routenpfad dargestellt. Weitere Informationen zum Hinzufügen von Linienebenen finden Sie unter Hinzufügen einer Linienebene zur Karte. Weitere Informationen zu Symbolebenen finden Sie unter Hinzufügen einer Symbolebene zu einer Karte.
Fügen Sie im
ready
-Ereignishandler des Kartensteuerelements den folgenden Code hinzu.//Create a data source and add it to the map. datasource = new atlas.source.DataSource(); map.sources.add(datasource); //Add a layer for rendering the route lines and have it render under the map labels. map.layers.add(new atlas.layer.LineLayer(datasource, null, { strokeColor: ['get', 'strokeColor'], strokeWidth: ['get', 'strokeWidth'], lineJoin: 'round', lineCap: 'round' }), 'labels'); //Add a layer for rendering point data. map.layers.add(new atlas.layer.SymbolLayer(datasource, null, { iconOptions: { image: ['get', 'icon'], allowOverlap: true }, textOptions: { textField: ['get', 'title'], offset: [0, 1.2] }, filter: ['any', ['==', ['geometry-type'], 'Point'], ['==', ['geometry-type'], 'MultiPoint']] //Only render Point or MultiPoints in this layer. }));
Einige Hinweise zu JavaScript:
- Im Ereignishandler
ready
des Kartensteuerelements wird eine Datenquelle zum Speichern der Route zwischen Start und Ziel erstellt. - Stärke und Farbe der Linie werden mithilfe von Ausdrücken aus Eigenschaften des Routenlinienfeatures abgerufen.
- Übergeben Sie einen zweiten Parameter mit dem Wert
'labels'
, um sicherzustellen, dass die Straßennamen nicht von der Routenlinie verdeckt werden.
Als Nächstes wird eine Symbolebene erstellt und der Datenquelle angefügt. Diese Ebene gibt an, wie die Start- und Endpunkte gerendert werden. Es werden Ausdrücke hinzugefügt, um das Symbol und die Beschriftungsinformationen aus Eigenschaften für das jeweilige Punktobjekt abzurufen. Weitere Informationen zu Ausdrücken finden Sie unter Datengesteuerte Formatvorlagenausdrücke (Web SDK).
- Im Ereignishandler
Legen Sie als Nächstes den Startpunkt auf ein fiktives Unternehmen in Seattle namens Fabrikam und den Endpunkt auf eine Niederlassung von Microsoft fest. Fügen Sie im
ready
-Ereignishandler des Kartensteuerelements den folgenden Code hinzu.//Create the GeoJSON objects which represent the start and end point of the route. var startPoint = new atlas.data.Feature(new atlas.data.Point([-122.356099, 47.580045]), { title: 'Fabrikam, Inc.', icon: 'pin-blue' }); var endPoint = new atlas.data.Feature(new atlas.data.Point([-122.201164, 47.616940]), { title: 'Microsoft - Lincoln Square', icon: 'pin-round-blue' }); //Add the data to the data source. datasource.add([startPoint, endPoint]); //Fit the map window to the bounding box defined by the start and end positions. map.setCamera({ bounds: atlas.data.BoundingBox.fromData([startPoint, endPoint]), padding: 100 });
Informationen zu JavaScript:
- Mit diesem Code werden zwei GeoJSON-Punktobjekte erstellt, die für den Start- bzw. Endpunkt der Route stehen, die dann der Datenquelle hinzugefügt werden.
- Mit dem letzten Codeblock wird mithilfe der Breiten- und Längengrade von Start- und Endpunkt die Kameraperspektive festgelegt.
- Die Start- und Endpunkte werden der Datenquelle hinzugefügt.
- Das umgebende Rechteck für die Start- und Endpunkte wird mithilfe der Funktion
atlas.data.BoundingBox.fromData
berechnet. Dieses umgebende Rechteck dient dazu, die Kameraansicht der Karte mithilfe der Funktionmap.setCamera
auf die gesamte Route zu platzieren. - Zur Kompensierung der Pixeldimensionen der Symbole wird Abstand hinzugefügt.
- Weitere Informationen finden Sie in der technischen Dokumentation von Microsoft zur setCamera-Funktion.
Speichern Sie die Datei TruckRoute.html, und aktualisieren Sie Ihren Browser. Die Karte ist nun auf Seattle zentriert. Der blaue Teardrop-Pin markiert den Startpunkt. Der runde blaue Pin markiert den Endpunkt.
Anfordern und Anzeigen von PKW- und LKW-Routen auf einer Karte
In diesem Abschnitt erfahren Sie, wie Sie den Routendienst von Azure Maps verwenden, um Wegbeschreibungen zwischen Punkten auf der Grundlage der Fortbewegungsart zu erhalten. Es werden zwei Fortbewegungsarten verwendet: Lkw und Pkw.
Tipp
Der Routendienst stellt APIs zum Planen der schnellsten, kürzesten, umweltfreundlichsten oder schönsten Route unter Berücksichtigung von Entfernung, Verkehrslage und verwendeter Fortbewegungsart bereit. Mit dem Dienst können Benutzer auch zukünftige Routen auf der Grundlage historischer Verkehrsbedingungen planen. Benutzer können die Vorhersage der Routendauer für einen beliebigen Zeitpunkt sehen. Weitere Informationen finden Sie unter Abrufen von Wegbeschreibungen.
Fügen Sie in der
GetMap
-Funktion imready
-Ereignishandler des Steuerelements den folgenden JavaScript-Code hinzu, um eine LKW-Route zwischen dem Start- und dem Endpunkt zu erstellen. Diese Route wird für einen LKW erstellt und angezeigt, der Fracht mit der KlassifizierungUSHazmatClass2
transportiert.//Start and end point input to the search route request var query = startPoint.geometry.coordinates[1] + "," + startPoint.geometry.coordinates[0] + ":" + endPoint.geometry.coordinates[1] + "," + endPoint.geometry.coordinates[0]; //Make a search route request for a truck vehicle type var truckRouteUrl = `https://atlas.microsoft.com/route/directions/json?api-version=1.0&travelMode=truck&vehicleWidth=2&vehicleHeight=2&vehicleLength=5&vehicleLoadType=USHazmatClass2&query=${query}`; fetch(truckRouteUrl, { headers: { "Subscription-Key": map.authentication.getToken() } }) .then((response) => response.json()) .then((response) => { var route = response.routes[0]; //Create an array to store the coordinates of each turn var routeCoordinates = []; route.legs.forEach((leg) => { var legCoordinates = leg.points.map((point) => { return [point.longitude, point.latitude]; }); //Add each turn to the array routeCoordinates = routeCoordinates.concat(legCoordinates); }); //Add the route line to the data source. We want this to render below the car route which will likely be added to the data source faster, so insert it at index 0. datasource.add( new atlas.data.Feature(new atlas.data.LineString(routeCoordinates), { strokeColor: "#2272B9", strokeWidth: 9 }), 0 ); });
Informationen zum vorstehenden JavaScript:
- Mit diesem Code wird der Routendienst von Azure Maps über die Wegbeschreibungs-API von Azure Maps abgerufen.
- Die Routenlinie wird dann aus den Koordinaten der einzelnen Abschnitte aus der Antwort erstellt.
- Anschließend wird die Routenlinie der Datenquelle hinzugefügt.
- Der LKW-Routenlinie werden zwei Eigenschaften hinzugefügt: eine Strichfarbe
#2272B9
(Blau) und eine Strichstärke (neun Pixel). - Die Routenlinie erhält den Index 0, um sicherzustellen, dass die LKW-Route vor allen anderen Linien in der Datenquelle gerendert wird. Der Grund dafür ist, dass die Berechnung einer Lkw-Route häufig länger dauert als die Berechnung einer Pkw-Route. Wenn die Linie für die LKW-Route nach der PKW-Route zur Datenquelle hinzugefügt wird, wird sie darüber gerendert.
Tipp
Alle verfügbaren Optionen und Werte für die Wegbeschreibungs-API von Azure Maps finden Sie in den URI-Parametern für Post Route Directions.
Fügen Sie als Nächstes den folgenden JavaScript-Code an, um eine Route für einen PKW zu erstellen.
var carRouteUrl = `https://atlas.microsoft.com/route/directions/json?api-version=1.0&query=${query}`; fetch(carRouteUrl, { headers: { "Subscription-Key": map.authentication.getToken() } }) .then((response) => response.json()) .then((response) => { var route = response.routes[0]; //Create an array to store the coordinates of each turn var routeCoordinates = []; route.legs.forEach((leg) => { var legCoordinates = leg.points.map((point) => { return [point.longitude, point.latitude]; }); //Add each turn to the array routeCoordinates = routeCoordinates.concat(legCoordinates); }); //Add the route line to the data source. This will add the car route after the truck route. datasource.add( new atlas.data.Feature(new atlas.data.LineString(routeCoordinates), { strokeColor: "#B76DAB", strokeWidth: 5 }) ); });
Informationen zu JavaScript:
- Mit diesem Code wird der Routendienst von Azure Maps über die Methode der Wegbeschreibungs-API von Azure Maps abgerufen.
- Die Routenlinie wird dann aus den Koordinaten der einzelnen Abschnitte erstellt und der Datenquelle hinzugefügt.
- Der LKW-Routenlinie werden zwei Eigenschaften hinzugefügt: eine Strichfarbe
#B76DAB
(Violett) und eine Strichstärke (fünf Pixel).
Speichern Sie die Datei TruckRoute.html, und aktualisieren Sie Ihren Webbrowser. Auf der Karte sollten nun sowohl die LKW- als auch die PKW-Route angezeigt werden.
- Die LKW-Route wird mit einer dicken blauen Linie angezeigt, und die PKW-Route wird mit einer dünnen violetten Linie angezeigt.
- Die PKW-Route verläuft über den Lake Washington auf der I-90, die durch Tunnel unter Wohngebieten hindurch führt. Da sich die Tunnel innerhalb von Wohngebieten befinden, ist diese Strecke nicht für Gefahrguttransporte geeignet. Die LKW-Route für den Frachttyp
USHazmatClass2
soll deshalb über eine andere Strecke verlaufen, die diesbezüglich keine Einschränkungen aufweist.
- Den vollständigen Code, der in diesem Tutorial verwendet wird, finden Sie auf GitHub im Truck Route-Tutorial.
- Unter Mehrere Routen nach Fortbewegungsmittel auf der Website für Azure Maps-Codebeispiele können Sie sich das Beispiel live ansehen.
- Sie können zudem datengestützte Formatvorlagenausdrücke verwenden.
Nächste Schritte
Im nächsten Tutorial wird der Prozess für die Erstellung einer einfachen Shopsuche mit Azure Maps erläutert.