Menampilkan rute dan petunjuk arah pada peta

Catatan

Layanan MapControl dan peta memerlukan kunci autentikasi peta yang disebut MapServiceToken. Untuk informasi selengkapnya tentang mendapatkan dan mengatur kunci autentikasi peta, lihat Meminta kunci autentikasi peta.

Minta rute dan petunjuk arah, dan tampilkan di aplikasi Anda.

Catatan

Untuk mempelajari selengkapnya tentang menggunakan peta di aplikasi Anda, unduh sampel peta Platform Windows Universal (UWP). Jika pemetaan bukan fitur inti aplikasi Anda, pertimbangkan untuk meluncurkan aplikasi Peta Windows sebagai gantinya. Anda dapat menggunakan bingmaps:skema URI , ms-drive-to:, dan ms-walk-to: untuk meluncurkan aplikasi Peta Windows ke peta tertentu dan arah belokan demi belokan. Untuk informasi selengkapnya, lihat Meluncurkan aplikasi Peta Windows.

 

Penganut hasil MapRouteFinder

Berikut adalah bagaimana kelas untuk rute dan petunjuk arah terkait:

Dapatkan rute mengemudi atau berjalan kaki dan petunjuk arah dengan memanggil metode kelas MapRouteFinder . Misalnya, GetDrivingRouteAsync atau GetWalkingRouteAsync.

Saat meminta rute, Anda dapat menentukan hal-hal berikut:

  • Anda hanya dapat menyediakan titik awal dan titik akhir, atau Anda dapat menyediakan serangkaian titik arah untuk menghitung rute.

    Titik arah berhenti menambahkan kaki rute tambahan, masing-masing dengan Rencana Perjalanan mereka sendiri. Untuk menentukan titik arah berhenti , gunakan salah satu overload GetDrivingRouteFromWaypointsAsync .

    Melalui waypoint mendefinisikan lokasi perantara antara titik arah berhenti . Mereka tidak menambahkan kaki rute. Mereka hanyalah titik arah yang harus dilewati rute. Untuk menentukan melalui titik arah, gunakan salah satu overload GetDrivingRouteFromEnhancedWaypointsAsync .

  • Anda dapat menentukan pengoptimalan (Misalnya: meminimalkan jarak).

  • Anda dapat menentukan pembatasan (Misalnya: menghindari jalan raya).

Tampilkan petunjuk arah

Objek MapRouteFinderResult berisi objek MapRoute yang dapat Anda akses melalui properti Rutenya .

MapRoute yang dihitung memiliki properti yang menyediakan waktu untuk melintasi rute, panjang rute, dan pengumpulan objek MapRouteLeg yang berisi kaki rute. Setiap objek MapRouteLeg berisi kumpulan objek MapRouteManeuver . Objek MapRouteManeuver berisi petunjuk arah yang dapat Anda akses melalui properti InstructionText-nya .

Penting

Anda harus menentukan kunci autentikasi peta sebelum dapat menggunakan layanan peta. Untuk informasi selengkapnya, lihat Meminta kunci autentikasi peta.

 

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

Contoh ini menampilkan hasil berikut ke kotak tbOutputText teks.

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.

Menampilkan rute

Untuk menampilkan MapRoute pada MapControl, buat MapRouteView dengan MapRoute. Kemudian, tambahkan MapRouteView ke koleksi RuteMapControl.

Penting

Anda harus menentukan kunci autentikasi peta sebelum dapat menggunakan layanan peta atau kontrol peta. Untuk informasi selengkapnya, lihat Meminta kunci autentikasi peta.

 

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

Contoh ini menampilkan hal berikut pada MapControl bernama MapWithRoute.

kontrol peta dengan rute ditampilkan.

Berikut adalah versi contoh ini yang menggunakan titik arah via di antara dua titik arah berhenti :

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