地図へのルートとルート案内の表示Display routes and directions on a map

注意

Mapcontrol および map サービス Requite は mapservicetokenと呼ばれるマップ認証キーを持っています。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:ms-walk-to: の各 UI スキームを使って、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.

 

MapRouteFinder 結果の概要An intro to MapRouteFinder results

ルートとルート案内のクラスがどのように関連するかを次に示します。Here's how the classes for routes and directions are related:

自動車や徒歩でのルートとルート案内を取得するには、MapRouteFinder クラスのメソッドを呼び出します。Get a driving or walking route and directions by calling the methods of the MapRouteFinder class. たとえば、GetDrivingRouteAsyncGetWalkingRouteAsync を使用できます。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 waypoints adds additional route legs, each with their own Itinerary. 立寄地を指定するには、GetDrivingRouteFromWaypointsAsync のオーバーロードのいずれかを使います。To specify stop waypoints, use any of the GetDrivingRouteFromWaypointsAsync overloads.

    経由地は、立寄地どうしの間の中間点を定義します。Via waypoint defines intermediate locations between stop waypoints. ルート区間は追加されません。They do not add route legs. これらは、通過する必要のあるルート上の中間点を示すだけです。They are merely waypoints that a route must pass through. 経由地を指定するには、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

MapControlMapRoute を表示するには、MapRoute を使って MapRouteView を構成します。To display a MapRoute on a MapControl, construct a MapRouteView with the MapRoute. 次に、 MaprouteviewMapcontrolrouteコレクションに追加します。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);
   }
}

この例では、 Mapwithrouteという名前のmapcontrolに次のコードが表示されます。This example displays the following on a MapControl named MapWithRoute.

ルートが表示されたマップ コントロール。

同じ例を使って、2 つの立寄地の間に 1 つの経由地を指定するバージョンを次に示します。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);
  }
}