Отображение маршрутов и направлений на картеDisplay routes and directions on a map

Примечание

MapControl и Map Services — это ключ проверки подлинности Maps, именуемый мапсервицетокен.MapControl and map services requite a maps authentication key called a MapServiceToken. Дополнительные сведения о получении и установке ключа проверки подлинности карт см. в статье Запрос ключа проверки подлинности карт.For more info about getting and setting a maps authentication key, see Request a maps authentication key.

Запрашивайте маршруты и направления, а также отображайте их в своем приложении.Request routes and directions, and display them in your app.

Примечание

Чтобы получить дополнительные сведения об использовании карт в приложении, скачайте пример карты универсальной платформы Windows (UWP).To learn more about using maps in your app, download the Universal Windows Platform (UWP) map sample. Если работа с картами является второстепенной функцией приложения, то рекомендуется использовать приложение "Карты Windows".If mapping isn't a core feature of your app, consider launching the Windows Maps app instead. Вы можете использовать bingmaps:, ms-drive-to:и схемы URI ms-walk-to: для запуска приложения "Карты Windows" с определенными картами и маршрутами.You can use the bingmaps:, ms-drive-to:, and ms-walk-to: URI schemes to launch the Windows Maps app to specific maps and turn-by-turn directions. См. сведения в руководстве по запуску приложения "Карты Windows".For more info, see Launch the Windows Maps app.

 

Общие сведения о результатах MapRouteFinderAn intro to MapRouteFinder results

Классы маршрутов и направлений связаны следующим образом.Here's how the classes for routes and directions are related:

  • Класс MapRouteFinder использует методы, позволяющие получать маршруты и направления.The MapRouteFinder class has methods that get routes and directions. Эти методы возвращают MapRouteFinderResult.These methods return a MapRouteFinderResult.

  • MapRouteFinderResult содержит объект MapRoute.The MapRouteFinderResult contains a MapRoute object. Получите доступ к этому объекту через свойство Route класса MapRouteFinderResult.Access this object through the Route property of the MapRouteFinderResult.

  • MapRoute содержит коллекцию объектов MapRouteLeg.The MapRoute contains a collection of MapRouteLeg objects. Получите доступ к этой коллекции с помощью свойства Legs класса MapRoute.Access this collection through the Legs property of the MapRoute.

  • Каждый MapRouteLeg содержит коллекцию объектов MapRouteManeuver.Each MapRouteLeg contains a collection of MapRouteManeuver objects. Получите доступ к этой коллекции с помощью свойства Maneuvers класса MapRouteLeg.Access this collection through the Maneuvers property of the MapRouteLeg.

Получите маршрут и направления, чтобы добраться до места пешком или на машине, вызвав методы класса MapRouteFinder.Get a driving or walking route and directions by calling the methods of the MapRouteFinder class. Например, GetDrivingRouteAsync или GetWalkingRouteAsync.For example, GetDrivingRouteAsync or GetWalkingRouteAsync.

При запросе маршрута можно указать следующее:When you request a route, you can specify the following things:

  • Можно указать только начальную и конечную точки или несколько точек для составления маршрута.You can provide a start point and end point only, or you can provide a series of waypoints to compute the route.

    Пункты Stop добавляют дополнительные отрезки маршрута, каждому из которых соответствует свой объект Itinerary.Stop waypoints adds additional route legs, each with their own Itinerary. Для указания пунктов stop используйте любую из перегрузок GetDrivingRouteFromWaypointsAsync.To specify stop waypoints, use any of the GetDrivingRouteFromWaypointsAsync overloads.

    Пункт Via определяет промежуточные точки между пунктами stop.Via waypoint defines intermediate locations between stop waypoints. Они не добавляют отрезки маршрута.They do not add route legs. Они представляют собой простые точки, через которые должен пролегать маршрут.They are merely waypoints that a route must pass through. Для указания пунктов via используйте любую из перегрузок GetDrivingRouteFromEnhancedWaypointsAsync.To specify via waypoints, use any of the GetDrivingRouteFromEnhancedWaypointsAsync overloads.

  • Можно задать оптимизацию (например, использовать кратчайший путь).You can specify optimizations (For example: minimize the distance).

  • Можно указать ограничения (например, избегать магистрали).You can specify restrictions (For example: avoid highways).

Отображение направленийDisplay directions

В объекте MapRouteFinderResult содержится объект MapRoute, доступ к которому можно получить с помощью свойства Route.The MapRouteFinderResult object contains a MapRoute object that you can access through its Route property.

Созданный класс MapRoute имеет свойства, показывающие время прохождения маршрута и его длину, а также содержит коллекцию объектов MapRouteLeg, составляющих отрезки маршрута.The computed MapRoute has properties that provide the time to traverse the route, the length of the route, and the collection of MapRouteLeg objects that contain the legs of the route. Каждый объект MapRouteLeg содержит коллекцию объектов MapRouteManeuver.Each MapRouteLeg object contains a collection of MapRouteManeuver objects. В объекте MapRouteManeuver содержатся направления, доступ к которым можно получить с помощью свойства InstructionText.The MapRouteManeuver object contains directions that you can access through its InstructionText property.

Важно!

Прежде чем использовать службы карт, необходимо указать ключ проверки подлинности карт.You must specify a maps authentication key before you can use map services. Дополнительные сведения см. в статье Запрос ключа проверки подлинности карт.For more info, see Request a maps authentication key.

 

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

Этот пример отображает в текстовом поле tbOutputText указанные ниже результаты.This example displays the following results to the tbOutputText text box.

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.

Отображение маршрутовDisplay routes

Чтобы отобразить MapRoute в MapControl, постройте MapRouteView с MapRoute.To display a MapRoute on a MapControl, construct a MapRouteView with the MapRoute. Затем добавьте MapRouteView в коллекцию Routes элемента MapControl.Then, add the MapRouteView to the Routes collection of the MapControl.

Важно!

Прежде чем использовать службы карт или элемент управления картой, необходимо указать ключ проверки подлинности карт.You must specify a maps authentication key before you can use map services or the map control. Дополнительные сведения см. в статье Запрос ключа проверки подлинности карт.For more info, see Request a maps authentication key.

 

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

В этом примере показан следующий элемент управления MapControl с именем MapWithRoute.This example displays the following on a MapControl named MapWithRoute.

элемент управления картой с отображенным маршрутом

Вот версия этого примера, в которой используется пункт via между двумя пунктами stop:Here's a version of this example that uses a via waypoint in between two stop waypoints:

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