Afficher les itinéraires et les itinéraires sur une carte
Important
Retrait du service Bing Maps for Enterprise
Le MapControl UWP et les services cartographiques de l'espace de noms Windows.Services.Maps reposent sur Bing Maps. Bing Maps for Enterprise est obsolète et sera supprimé. À ce moment-là, le MapControl et les services ne recevront plus de données.
Pour plus d'informations, consultez le centre de développement de Bing Maps et la documentation de Bing Maps.
Remarque
MapControl et les services de carte nécessitent une clé d’authentification de cartes appelée MapServiceToken. Pour plus d’informations sur l’obtention et la définition d’une clé d’authentification de cartes, voir Demander une clé d’authentification de cartes.
Demandez des itinéraires et des directions, puis affichez-les dans votre application.
Remarque
Si le mappage n’est pas une fonctionnalité principale de votre application, envisagez de lancer l’application Cartes Windows à la place. Vous pouvez utiliser les bingmaps:
schémas d’URI et ms-walk-to:
les ms-drive-to:
schémas d’URI pour lancer l’application Cartes Windows à des mappages spécifiques et des directions de tour à tour. Pour plus d’informations, consultez Lancer l’application Cartes Windows.
Présentation des résultats mapRouteFinder
Voici comment les classes pour les itinéraires et les itinéraires sont liées :
La classe MapRouteFinder a des méthodes qui obtiennent des itinéraires et des itinéraires. Ces méthodes retournent un MapRouteFinderResult.
MapRouteFinderResult contient un objet MapRoute. Accédez à cet objet via la propriété Route de MapRouteFinderResult.
MapRoute contient une collection d’objets MapRouteLeg. Accédez à cette collection via la propriété Legs de MapRoute.
Chaque MapRouteLeg contient une collection d’objets MapRouteManeuver. Accédez à cette collection via la propriété Manoeuvres de MapRouteLeg.
Obtenez un itinéraire de conduite ou de marche et des itinéraires en appelant les méthodes de la classe MapRouteFinder. Par exemple, GetDrivingRouteAsync ou GetWalkingRouteAsync.
Lorsque vous demandez un itinéraire, vous pouvez spécifier les éléments suivants :
Vous pouvez fournir un point de départ et un point de terminaison uniquement, ou vous pouvez fournir une série de points de route pour calculer l’itinéraire.
Les points de route d’arrêt ajoutent des jambes de route supplémentaires, chacune avec leur propre itinéraire. Pour spécifier des points de chemin d’arrêt , utilisez l’une des surcharges GetDrivingRouteFromWaypointsAsync .
Via waypoint définit des emplacements intermédiaires entre les points de chemin d’arrêt . Ils n’ajoutent pas de jambes de route. Ils sont simplement des points de route qu’un itinéraire doit traverser. Pour spécifier via waypoints, utilisez l’une des surcharges GetDrivingRouteFromEnhancedWaypointsAsync .
Vous pouvez spécifier des optimisations (par exemple : réduire la distance).
Vous pouvez spécifier des restrictions (par exemple : éviter les autoroutes).
Afficher les directions
L’objet MapRouteFinderResult contient un objet MapRoute auquel vous pouvez accéder via sa propriété Route.
MapRoute calculé a des propriétés qui fournissent le temps de parcourir l’itinéraire, la longueur de l’itinéraire et la collection d’objets MapRouteLeg qui contiennent les jambes de l’itinéraire. Chaque objet MapRouteLeg contient une collection d’objets MapRouteManeuver . L’objet MapRouteManeuver contient des directions auxquelles vous pouvez accéder via sa propriété InstructionText.
Important
Vous devez spécifier une clé d’authentification de mappage avant de pouvoir utiliser les services de carte. Pour plus d’informations, consultez Demander une clé d’authentification mappée.
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();
}
}
Cet exemple affiche les résultats suivants dans la tbOutputText
zone de texte.
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.
Afficher les itinéraires
Pour afficher un MapRoute sur un MapControl, construisez un MapRouteView avec MapRoute. Ensuite, ajoutez MapRouteView à la collection Routes de MapControl.
Important
Vous devez spécifier une clé d’authentification de mappage avant de pouvoir utiliser les services de carte ou le contrôle de carte. Pour plus d’informations, consultez Demander une clé d’authentification mappée.
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);
}
}
Cet exemple montre comment afficher les éléments suivants sur un MapControl nommé MapWithRoute.
Voici une version de cet exemple qui utilise un point de route entre deux points de chemin d’arrêt :
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);
}
}