Anzeigen von Routen und Wegbeschreibungen auf einer Karte

Wichtig

Einstellung des Bing Maps for Enterprise-Diensts

Die UWP-MapControl- und Kartendienste aus dem Windows.Services.Maps-Namespace basieren auf Bing Maps. Bing Maps for Enterprise ist veraltet und wird eingestellt, zu diesem Zeitpunkt empfangen mapControl und Dienste keine Daten mehr.

Weitere Informationen finden Sie in der Bing Maps Developer Center - und Bing Maps-Dokumentation.

Hinweis

MapControl und Kartendienste erfordern einen Kartenauthentifizierungsschlü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 die Zuordnung kein Kernfeature Ihrer App ist, sollten Sie stattdessen die Windows-Karten App starten. Sie können die bingmaps:Schemas ", ms-drive-to:" und ms-walk-to: URI" verwenden, um die Windows-Karten-App für bestimmte Karten und Turn-by-Turn-Wegbeschreibungen zu starten. Weitere Informationen finden Sie unter Starten der Windows-Karten-App.

Einführung in MapRouteFinder-Ergebnisse

So beziehen sich die Klassen für Routen und Wegbeschreibungen:

Rufen Sie eine Fahrt- oder Wanderroute und Wegbeschreibung 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 Anfangs- und Endpunkt bereitstellen oder eine Reihe von Wegpunkten bereitstellen, um die Route zu berechnen.

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

    Über Waypoint werden Zwischenstandorte zwischen Den-Wegpunkten definiert. Sie fügen keine Streckenbeine hinzu. Sie sind lediglich Wegpunkte, die eine Route passieren muss. Verwenden Sie zum Angeben über Wegpunkte eine der GetDrivingRouteFromEnhancedWaypointsAsync-Überladungen.

  • Sie können Optimierungen angeben (z. B. minimieren Sie den Abstand).

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

Anzeigen von Wegbeschreibungen

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

Die berechnete MapRoute verfügt über Eigenschaften, die die Zeit zum Durchlaufen der Route, die Länge der Route und die Sammlung von MapRouteLeg-Objekten bereitstellen, die die Beine der Route enthalten. Jedes MapRouteLeg -Objekt enthält eine Auflistung von MapRouteManeuver -Objekten. Das MapRouteManeuver-Objekt enthält Wegbeschreibungen, 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();
   }
}

In diesem Beispiel werden die folgenden Ergebnisse für das tbOutputText Textfeld angezeigt.

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

Um eine MapRoute auf einem MapControl-Objekt anzuzeigen, erstellen Sie eine MapRouteView mit der MapRoute. Fügen Sie dann die MapRouteView der Routes-Auflistung von 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 auf einem MapControl-Objekt mit dem Namen MapWithRoute angezeigt.

Kartensteuerelement mit angezeigter Route.

Hier ist eine Version dieses Beispiels, die einen Via-Waypoint 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);
  }
}