Anzeigen von Routen und Wegbeschreibungen auf einer Karte
Wichtig
Einstellung des Bing Maps for Enterprise-Diensts
Die UWP-MapControl- und Kartendienste aus dem Windows.Services.Maps-Namespace basieren auf Bing Maps. Bing Maps for Enterprise ist veraltet und wird eingestellt, zu diesem Zeitpunkt empfangen mapControl und Dienste keine Daten mehr.
Weitere Informationen finden Sie in der Bing Maps Developer Center - und Bing Maps-Dokumentation.
Hinweis
MapControl und Kartendienste erfordern einen Kartenauthentifizierungsschlüssel namens MapServiceToken. Weitere Informationen zum Abrufen und Festlegen eines Kartenauthentifizierungsschlüssels finden Sie unter Anfordern eines Kartenauthentifizierungsschlüssels.
Fordern Sie Routen und Wegbeschreibungen an, und zeigen Sie sie in Ihrer App an.
Hinweis
Wenn die Zuordnung kein Kernfeature Ihrer App ist, sollten Sie stattdessen die Windows-Karten App starten. Sie können die bingmaps:
Schemas ", ms-drive-to:
" und ms-walk-to:
URI" verwenden, um die Windows-Karten-App für bestimmte Karten und Turn-by-Turn-Wegbeschreibungen zu starten. Weitere Informationen finden Sie unter Starten der Windows-Karten-App.
Einführung in MapRouteFinder-Ergebnisse
So beziehen sich die Klassen für Routen und Wegbeschreibungen:
Die MapRouteFinder-Klasse verfügt über Methoden zum Abrufen von Routen und Wegbeschreibungen. Diese Methoden geben ein MapRouteFinderResult zurück.
Das MapRouteFinderResult enthält ein MapRoute-Objekt. Greifen Sie über die Route-Eigenschaft des MapRouteFinderResult auf dieses Objekt zu.
Die MapRoute enthält eine Auflistung von MapRouteLeg-Objekten. Greifen Sie über die Leg-Eigenschaft der MapRoute auf diese Auflistung zu.
Jedes MapRouteLeg enthält eine Auflistung von MapRouteManeuver-Objekten. Greifen Sie über die Manövereigenschaft von MapRouteLeg auf diese Sammlung zu.
Rufen Sie eine Fahrt- oder Wanderroute und Wegbeschreibung ab, indem Sie die Methoden der MapRouteFinder-Klasse aufrufen. Beispiel: GetDrivingRouteAsync oder GetWalkingRouteAsync.
Wenn Sie eine Route anfordern, können Sie folgendes angeben:
Sie können nur einen Anfangs- und Endpunkt bereitstellen oder eine Reihe von Wegpunkten bereitstellen, um die Route zu berechnen.
Stopp-Wegpunkte fügen zusätzliche Routenbeine hinzu, die jeweils ihre eigene Reiseroute haben. Verwenden Sie zum Angeben von Stoppwegpunkten eine der GetDrivingRouteFromWaypointsAsync-Überladungen.
Über Waypoint werden Zwischenstandorte zwischen Den-Wegpunkten definiert. Sie fügen keine Streckenbeine hinzu. Sie sind lediglich Wegpunkte, die eine Route passieren muss. Verwenden Sie zum Angeben über Wegpunkte eine der GetDrivingRouteFromEnhancedWaypointsAsync-Überladungen.
Sie können Optimierungen angeben (z. B. minimieren Sie den Abstand).
Sie können Einschränkungen angeben (z. B.: Autobahnen vermeiden).
Anzeigen von Wegbeschreibungen
Das MapRouteFinderResult -Objekt enthält ein MapRoute -Objekt, auf das Sie über seine Route-Eigenschaft zugreifen können.
Die berechnete MapRoute verfügt über Eigenschaften, die die Zeit zum Durchlaufen der Route, die Länge der Route und die Sammlung von MapRouteLeg-Objekten bereitstellen, die die Beine der Route enthalten. Jedes MapRouteLeg -Objekt enthält eine Auflistung von MapRouteManeuver -Objekten. Das MapRouteManeuver-Objekt enthält Wegbeschreibungen, auf die Sie über seine InstructionText-Eigenschaft zugreifen können.
Wichtig
Sie müssen einen Kartenauthentifizierungsschlüssel angeben, bevor Sie Kartendienste verwenden können. Weitere Informationen finden Sie unter Anfordern eines Kartenauthentifizierungsschlüssels.
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.Services.Maps;
using Windows.Devices.Geolocation;
...
private async void button_Click(object sender, RoutedEventArgs e)
{
// Start at Microsoft in Redmond, Washington.
BasicGeoposition startLocation = new BasicGeoposition() {Latitude=47.643,Longitude=-122.131};
// End at the city of Seattle, Washington.
BasicGeoposition endLocation = new BasicGeoposition() {Latitude = 47.604,Longitude= -122.329};
// Get the route between the points.
MapRouteFinderResult routeResult =
await MapRouteFinder.GetDrivingRouteAsync(
new Geopoint(startLocation),
new Geopoint(endLocation),
MapRouteOptimization.Time,
MapRouteRestrictions.None);
if (routeResult.Status == MapRouteFinderStatus.Success)
{
System.Text.StringBuilder routeInfo = new System.Text.StringBuilder();
// Display summary info about the route.
routeInfo.Append("Total estimated time (minutes) = ");
routeInfo.Append(routeResult.Route.EstimatedDuration.TotalMinutes.ToString());
routeInfo.Append("\nTotal length (kilometers) = ");
routeInfo.Append((routeResult.Route.LengthInMeters / 1000).ToString());
// Display the directions.
routeInfo.Append("\n\nDIRECTIONS\n");
foreach (MapRouteLeg leg in routeResult.Route.Legs)
{
foreach (MapRouteManeuver maneuver in leg.Maneuvers)
{
routeInfo.AppendLine(maneuver.InstructionText);
}
}
// Load the text box.
tbOutputText.Text = routeInfo.ToString();
}
else
{
tbOutputText.Text =
"A problem occurred: " + routeResult.Status.ToString();
}
}
In diesem Beispiel werden die folgenden Ergebnisse für das tbOutputText
Textfeld angezeigt.
Total estimated time (minutes) = 18.4833333333333
Total length (kilometers) = 21.847
DIRECTIONS
Head north on 157th Ave NE.
Turn left onto 159th Ave NE.
Turn left onto NE 40th St.
Turn left onto WA-520 W.
Enter the freeway WA-520 from the right.
Keep left onto I-5 S/Portland.
Keep right and leave the freeway at exit 165A towards James St..
Turn right onto James St.
You have reached your destination.
Anzeigen von Routen
Um eine MapRoute auf einem MapControl-Objekt anzuzeigen, erstellen Sie eine MapRouteView mit der MapRoute. Fügen Sie dann die MapRouteView der Routes-Auflistung von MapControl hinzu.
Wichtig
Sie müssen einen Kartenauthentifizierungsschlüssel angeben, bevor Sie Kartendienste oder das Kartensteuerelement verwenden können. Weitere Informationen finden Sie unter Anfordern eines Kartenauthentifizierungsschlüssels.
using System;
using Windows.Devices.Geolocation;
using Windows.Services.Maps;
using Windows.UI;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Maps;
...
private async void ShowRouteOnMap()
{
// Start at Microsoft in Redmond, Washington.
BasicGeoposition startLocation = new BasicGeoposition() { Latitude = 47.643, Longitude = -122.131 };
// End at the city of Seattle, Washington.
BasicGeoposition endLocation = new BasicGeoposition() { Latitude = 47.604, Longitude = -122.329 };
// Get the route between the points.
MapRouteFinderResult routeResult =
await MapRouteFinder.GetDrivingRouteAsync(
new Geopoint(startLocation),
new Geopoint(endLocation),
MapRouteOptimization.Time,
MapRouteRestrictions.None);
if (routeResult.Status == MapRouteFinderStatus.Success)
{
// Use the route to initialize a MapRouteView.
MapRouteView viewOfRoute = new MapRouteView(routeResult.Route);
viewOfRoute.RouteColor = Colors.Yellow;
viewOfRoute.OutlineColor = Colors.Black;
// Add the new MapRouteView to the Routes collection
// of the MapControl.
MapWithRoute.Routes.Add(viewOfRoute);
// Fit the MapControl to the route.
await MapWithRoute.TrySetViewBoundsAsync(
routeResult.Route.BoundingBox,
null,
Windows.UI.Xaml.Controls.Maps.MapAnimationKind.None);
}
}
In diesem Beispiel wird Folgendes auf einem MapControl-Objekt mit dem Namen MapWithRoute angezeigt.
Hier ist eine Version dieses Beispiels, die einen Via-Waypoint zwischen zwei Stopp-Wegpunkten verwendet:
using System;
using Windows.Devices.Geolocation;
using Windows.Services.Maps;
using Windows.UI;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Maps;
...
private async void ShowRouteOnMap()
{
Geolocator locator = new Geolocator();
locator.DesiredAccuracyInMeters = 1;
locator.PositionChanged += Locator_PositionChanged;
BasicGeoposition point1 = new BasicGeoposition() { Latitude = 47.649693, Longitude = -122.144908 };
BasicGeoposition point2 = new BasicGeoposition() { Latitude = 47.6205, Longitude = -122.3493 };
BasicGeoposition point3 = new BasicGeoposition() { Latitude = 48.649693, Longitude = -122.144908 };
// Get Driving Route from point A to point B thru point C
var path = new List<EnhancedWaypoint>();
path.Add(new EnhancedWaypoint(new Geopoint(point1), WaypointKind.Stop));
path.Add(new EnhancedWaypoint(new Geopoint(point2), WaypointKind.Via));
path.Add(new EnhancedWaypoint(new Geopoint(point3), WaypointKind.Stop));
MapRouteFinderResult routeResult = await MapRouteFinder.GetDrivingRouteFromEnhancedWaypointsAsync(path);
if (routeResult.Status == MapRouteFinderStatus.Success)
{
MapRouteView viewOfRoute = new MapRouteView(routeResult.Route);
viewOfRoute.RouteColor = Colors.Yellow;
viewOfRoute.OutlineColor = Colors.Black;
myMap.Routes.Add(viewOfRoute);
await myMap.TrySetViewBoundsAsync(
routeResult.Route.BoundingBox,
null,
Windows.UI.Xaml.Controls.Maps.MapAnimationKind.None);
}
}