Compartir a través de


Mostrar rutas e instrucciones en un mapa

Importante

Retirada del servicio Bing Maps for Enterprise

Los servicios MapControl y map de UWP del espacio de nombres Windows.Services.Maps se basan en Mapas de Bing. Bing Maps for Enterprise está en desuso y se retirará, momento en el que los servicios y MapControl ya no recibirán datos.

Para obtener más información, consulte la documentación del Centro para desarrolladores de Mapas de Bing y Mapas de Bing.

Nota:

MapControl y servicios de mapas requieren una clave de autenticación de mapas denominada MapServiceToken. Para obtener más información sobre cómo obtener y establecer una clave de autenticación de mapas, consulta Solicitar una clave de autenticación de mapas.

Solicita rutas e indicaciones y muéstralas en tu aplicación.

Nota:

Si la asignación no es una característica principal de la aplicación, considere la posibilidad de iniciar la aplicación Mapas de Windows en su lugar. Puede usar los bingmaps:esquemas de URI , ms-drive-to:y ms-walk-to: para iniciar la aplicación de Mapas de Windows a mapas específicos y direcciones de turno a turno. Para obtener más información, consulta Iniciar la aplicación Mapas de Windows.

Introducción a los resultados de MapRouteFinder

Este es el modo en que se relacionan las clases de rutas e instrucciones:

Obtenga una ruta de conducción o caminar y direcciones llamando a los métodos de la clase MapRouteFinder. Por ejemplo, GetDrivingRouteAsync o GetWalkingRouteAsync.

Al solicitar una ruta, puede especificar lo siguiente:

  • Solo puede proporcionar un punto de inicio y un punto de conexión, o puede proporcionar una serie de puntos de referencia para calcular la ruta.

    Los puntos de referencia de parada agregan tramos de ruta adicionales, cada uno con su propio itinerario. Para especificar puntos de referencia de parada, use cualquiera de las sobrecargas GetDrivingRouteFromWaypointsAsync.

    A través de waypoint se definen ubicaciones intermedias entre los puntos de referencia de parada . No agregan piernas de ruta. Son simplemente puntos de referencia que una ruta debe pasar. Para especificar a través de puntos de referencia, use cualquiera de las sobrecargas GetDrivingRouteFromEnhancedWaypointsAsync .

  • Puede especificar optimizaciones (por ejemplo: minimizar la distancia).

  • Puede especificar restricciones (por ejemplo: evitar autopistas).

Indicaciones para mostrar

El objeto MapRouteFinderResult contiene un objeto MapRoute al que puede acceder a través de su propiedad Route.

MapRoute calculado tiene propiedades que proporcionan el tiempo para recorrer la ruta, la longitud de la ruta y la colección de objetos MapRouteLeg que contienen las piernas de la ruta. Cada objeto MapRouteLeg contiene una colección de objetos MapRouteManeuver . El objeto MapRouteManeuver contiene instrucciones a las que puede acceder a través de su propiedad InstructionText.

Importante

Debe especificar una clave de autenticación de mapas para poder usar los servicios de mapa. Para obtener más información, consulta Solicitar una clave de autenticación de mapas.

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

En este ejemplo se muestran los siguientes resultados en el cuadro de tbOutputText texto.

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.

Mostrar rutas

Para mostrar una clase MapRoute en mapControl, construya un objeto MapRouteView con MapRoute. A continuación, agregue MapRouteView a la colección Routes de MapControl.

Importante

Debe especificar una clave de autenticación de mapas para poder usar los servicios de mapa o el control de mapa. Para obtener más información, consulta Solicitar una clave de autenticación de mapas.

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

En este ejemplo se muestra lo siguiente en un MapControl denominado MapWithRoute.

control de mapa con la ruta mostrada.

Esta es una versión de este ejemplo que usa un punto de acceso a través de un punto de referencia entre dos puntos de referencia de detención :

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