Partager via


Afficher les itinéraires et les itinéraires sur une carte

Important

Mise hors service Bing Maps for Enterprise

Les services MapControl et MapControl UWP de l’espace de noms Windows.Services.Maps s’appuient sur Bing Maps. Bing Maps for Enterprise est déconseillé et sera mis hors service, auquel cas mapControl et les services ne recevront plus de données.

Pour plus d’informations, consultez le Centre de développement Bing Maps et la documentation 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 :

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.

contrôle de carte avec itinéraire affiché.

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