Afficher des itinéraires et indications sur une carte
Notes
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.
Notes
Pour en savoir plus sur l’utilisation de cartes dans votre application, téléchargez l’exemple de carte plateforme Windows universelle (UWP).
Si le mappage n’est pas une fonctionnalité de base de votre application, envisagez plutôt de lancer l’application Cartes Windows. Vous pouvez utiliser les schémas d’URI bingmaps:
, ms-drive-to:
et ms-walk-to:
afin de lancer l’application Cartes Windows en accédant à des cartes, itinéraires et indications étape par étape spécifiques. Pour plus d’informations, consultez Lancer l’application Cartes Windows.
Introduction aux résultats de MapRouteFinder
Les classes pour les itinéraires et les indications sont associées comme suit :
La classe MapRouteFinder a des méthodes qui obtiennent des itinéraires et des directions. Ces méthodes retournent un MapRouteFinderResult.
La classe MapRouteFinderResult contient un objet MapRoute. Accédez à cet objet via la propriété Route de la classe MapRouteFinderResult.
La classe MapRoute contient une collection d’objets MapRouteLeg. Accédez à cette collection via la propriété Legs de la classe MapRoute.
Chaque classe MapRouteLeg contient une collection d’objets MapRouteManeuver. Accédez à cette collection via la propriété Maneuvers de la classe MapRouteLeg.
Obtenez un itinéraire et des itinéraires de conduite ou de marche en appelant les méthodes de la classe MapRouteFinder . Par exemple, GetDrivingRouteAsync ou GetWalkingRouteAsync.
Lorsque vous demandez un itinéraire :
Vous pouvez indiquer uniquement un point de départ et un point d’arrivée, ou une série de positions pour calculer l’itinéraire.
Stop waypoints ajoute des étapes de route supplémentaires, chacun avec son 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 tronçons de route. Il s’agit simplement de points de passage par lesquels un itinéraire doit passer. Pour spécifier via des 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 des indications
L’objet MapRouteFinderResult contient un objet MapRoute accessible via sa propriété Route.
Le MapRoute calculé a des propriétés qui fournissent le temps nécessaire pour parcourir l’itinéraire, la longueur de l’itinéraire et la collection d’objets MapRouteLeg qui contiennent les étapes de l’itinéraire. Chaque objet MapRouteLeg contient une collection d’objets MapRouteManeuver. L’objet MapRouteManeuver contient des indications accessibles 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, voir Demander une clé d’authentification pour Cartes.
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 montre les résultats suivants dans la zone de texte tbOutputText
.
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 des itinéraires
Pour afficher un MapRoute sur un MapControl, créez un MapRouteView avec MapRoute. Ajoutez ensuite 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, voir Demander une clé d’authentification pour Cartes.
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 affiche ce qui suit sur un MapControl nommé MapWithRoute.
Voici une version de cet exemple qui utilise un waypoint via entre deux waypoints 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);
}
}
Rubriques connexes
- Espace partenaires Bing Cartes
- Exemple de carte UWP
- Recommandations de conception pour les cartes
- Vidéos de la build 2015 : utilisation de cartes et de localisation sur un téléphone, une tablette et un PC dans vos applications Windows
- Exemple d’application de trafic UWP
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour