Share via


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 :

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.

Contrôle de carte avec l’itinéraire affiché.

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);
  }
}