Anzeigen von Routen und Wegbeschreibungen auf einer Karte
Hinweis
MapControl und Kartendienste erfordern einen Karten-Authentifizierungsschlü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 Sie mehr über die Verwendung von Karten in Ihrer App erfahren möchten, laden Sie das Kartenbeispiel Universelle Windows-Plattform (UWP) herunter.
Wenn die Zuordnung kein Kernfeature Ihrer App ist, sollten Sie stattdessen die Windows-Karten-App starten. Sie können die URI-Schemas bingmaps:
, ms-drive-to:
und ms-walk-to:
zum Starten der Windows-Karten-App für bestimmte Karten und für Wegbeschreibungen mit Sprachnavigation verwenden. Weitere Informationen finden Sie unter Starten der Windows-Karten-App.
Eine Einführung in die MapRouteFinder-Ergebnisse
Hier erfahren Sie, wie Klassen für Routen und Wegbeschreibungen zusammenhängen.
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 Sammlung von MapRouteLeg-Objekten. Greifen Sie über die Legs-Eigenschaft der MapRoute auf diese Sammlung zu.
Jeder MapRouteLeg enthält eine Sammlung von MapRouteManeuver-Objekten. Greifen Sie über die Maneuvers-Eigenschaft des MapRouteLeg auf diese Sammlung zu.
Rufen Sie eine Fahr- oder Wanderroute und Wegbeschreibungen 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 Startpunkt und einen Endpunkt oder eine Reihe von Wegpunkten zur Berechnung angeben.
Stop-Wegpunkte fügen zusätzliche Routenpunkte hinzu, die jeweils eine eigene Reiseroute haben. Verwenden Sie zum Angeben von Stoppwegpunkten eine der GetDrivingRouteFromWaypointsAsync-Überladungen .
Über Wegpunkt werden Zwischenstandorte zwischen Stoppwegpunkten definiert. Sie fügen keine Routenbeine hinzu. Sie sind lediglich Wegpunkte, durch die eine Route gehen muss. Um über Wegpunkte anzugeben, verwenden Sie eine der GetDrivingRouteFromEnhancedWaypointsAsync-Überladungen .
Sie können Optimierungen angeben (z. B. minimieren Sie die Entfernung).
Sie können Einschränkungen angeben (z. B.: Vermeiden von Autobahnen).
Anzeigen von Wegbeschreibungen
Das MapRouteFinderResult-Objekt enthält ein MapRoute-Objekt, auf das Sie über seine Route-Eigenschaft zugreifen können.
Die berechnete MapRoute hat Eigenschaften, die die Zeit zum Zurücklegen der Route, die Länge der Route und die Auflistung von MapRouteLeg-Objekten bereitstellen, die die Teilstrecken der Route enthalten. Jedes MapRouteLeg-Objekt enthält eine Auflistung von MapRouteManeuver-Objekten. Das MapRouteManeuver-Objekt enthält eine Wegbeschreibung, 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();
}
}
Dieses Beispiel zeigt die folgenden Ergebnisse im tbOutputText
-Textfeld an:
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
Blenden Sie eine MapRoute auf einem MapControl ein, indem Sie eine MapRouteView mit der MapRoute erstellen. Fügen Sie dann die MapRouteView der Routes-Auflistung des 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 in einem MapControl-Steuerelement mit dem Namen MapWithRoute angezeigt.
Hier sehen Sie eine Version dieses Beispiels, die einen Via-Wegpunkt 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);
}
}
Zugehörige Themen
- Bing Karten Developer Center
- Beispiel für UWP-Karte
- Entwurfsrichtlinien für Karten
- Build 2015-Video: Nutzen von Karten und Ortung über Telefon, Tablet und PC in Ihren Windows-Apps
- Beispiel für eine UWP-App mit Verkehrsinformationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für