Anzeigen von Routen und Wegbeschreibungen auf einer Karte

Hinweis

MapControl und Kartendienste erfordern einen Karten-Authentifizierungsschlüssel namens MapServiceToken. Weitere Informationen zum Abrufen und Festlegen eines Kartenauthentifizierungsschlüssels finden Sie unter Anfordern eines Kartenauthentifizierungsschlüssels.

Fordern Sie Routen und Wegbeschreibungen an, und zeigen Sie sie in Ihrer App an.

Hinweis

Wenn Sie mehr über die Verwendung von Karten in Ihrer App erfahren möchten, laden Sie das Kartenbeispiel Universelle Windows-Plattform (UWP) herunter. Wenn die Zuordnung kein Kernfeature Ihrer App ist, sollten Sie stattdessen die Windows-Karten-App starten. Sie können die URI-Schemas bingmaps:, ms-drive-to: und ms-walk-to: zum Starten der Windows-Karten-App für bestimmte Karten und für Wegbeschreibungen mit Sprachnavigation verwenden. Weitere Informationen finden Sie unter Starten der Windows-Karten-App.

 

Eine Einführung in die MapRouteFinder-Ergebnisse

Hier erfahren Sie, wie Klassen für Routen und Wegbeschreibungen zusammenhängen.

Rufen Sie eine Fahr- oder Wanderroute und Wegbeschreibungen ab, indem Sie die Methoden der MapRouteFinder-Klasse aufrufen. Beispiel : GetDrivingRouteAsync oder GetWalkingRouteAsync.

Wenn Sie eine Route anfordern, können Sie Folgendes angeben:

  • Sie können nur einen Startpunkt und einen Endpunkt oder eine Reihe von Wegpunkten zur Berechnung angeben.

    Stop-Wegpunkte fügen zusätzliche Routenpunkte hinzu, die jeweils eine eigene Reiseroute haben. Verwenden Sie zum Angeben von Stoppwegpunkten eine der GetDrivingRouteFromWaypointsAsync-Überladungen .

    Über Wegpunkt werden Zwischenstandorte zwischen Stoppwegpunkten definiert. Sie fügen keine Routenbeine hinzu. Sie sind lediglich Wegpunkte, durch die eine Route gehen muss. Um über Wegpunkte anzugeben, verwenden Sie eine der GetDrivingRouteFromEnhancedWaypointsAsync-Überladungen .

  • Sie können Optimierungen angeben (z. B. minimieren Sie die Entfernung).

  • Sie können Einschränkungen angeben (z. B.: Vermeiden von Autobahnen).

Anzeigen von Wegbeschreibungen

Das MapRouteFinderResult-Objekt enthält ein MapRoute-Objekt, auf das Sie über seine Route-Eigenschaft zugreifen können.

Die berechnete MapRoute hat Eigenschaften, die die Zeit zum Zurücklegen der Route, die Länge der Route und die Auflistung von MapRouteLeg-Objekten bereitstellen, die die Teilstrecken der Route enthalten. Jedes MapRouteLeg-Objekt enthält eine Auflistung von MapRouteManeuver-Objekten. Das MapRouteManeuver-Objekt enthält eine Wegbeschreibung, auf die Sie über seine InstructionText-Eigenschaft zugreifen können.

Wichtig

Sie müssen einen Kartenauthentifizierungsschlüssel angeben, bevor Sie Kartendienste verwenden können. Weitere Informationen finden Sie unter Anfordern eines Kartenauthentifizierungsschlüssels.

 

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

Dieses Beispiel zeigt die folgenden Ergebnisse im tbOutputText-Textfeld an:

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.

Anzeigen von Routen

Blenden Sie eine MapRoute auf einem MapControl ein, indem Sie eine MapRouteView mit der MapRoute erstellen. Fügen Sie dann die MapRouteView der Routes-Auflistung des MapControl hinzu.

Wichtig

Sie müssen einen Kartenauthentifizierungsschlüssel angeben, bevor Sie Kartendienste oder das Kartensteuerelement verwenden können. Weitere Informationen finden Sie unter Anfordern eines Kartenauthentifizierungsschlüssels.

 

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

In diesem Beispiel wird Folgendes in einem MapControl-Steuerelement mit dem Namen MapWithRoute angezeigt.

Kartensteuerelement mit angezeigter Route

Hier sehen Sie eine Version dieses Beispiels, die einen Via-Wegpunkt zwischen zwei Stopp-Wegpunkten verwendet:

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