Delen via


Routes en routebeschrijvingen op een kaart weergeven

Belangrijk

Buitengebruikstelling van Bing Maps for Enterprise-dienst

De UWP-MapControl en kaartservices van de Windows.Services.Maps naamruimte zijn afhankelijk van Bing Kaarten. Bing Kaarten voor Ondernemingen is afgeschaft en wordt buiten gebruik gesteld. Op dat moment ontvangen de MapControl- en services geen gegevens meer.

Voor meer informatie, zie het Bing Maps Developer Center en de Bing Maps-documentatie.

Notitie

MapControl- en kaartservices vereisen een verificatiesleutel voor kaarten, een MapServiceToken-genoemd. Zie Een kaartverificatiesleutel aanvragenvoor meer informatie over het ophalen en instellen van een verificatiesleutel voor kaarten.

Vraag routes en routebeschrijvingen aan en geef deze weer in uw app.

Notitie

Als 'kaarten' geen kernfunctie van uw app is, kunt u overwegen de Windows Maps app te starten. U kunt de bingmaps:, ms-drive-to:en ms-walk-to: URI-schema's gebruiken om de Windows Maps-app te starten op specifieke kaarten en kant-en-klare routebeschrijvingen. Zie De Windows Maps-app startenvoor meer informatie.

Een inleiding tot MapRouteFinder-resultaten

De klassen voor routes en routebeschrijvingen zijn als volgt gerelateerd:

Haal een rij- of wandelroute en aanwijzingen op door de methoden van de MapRouteFinder klasse aan te roepen. Bijvoorbeeld GetDrivingRouteAsync of GetWalkingRouteAsync.

Wanneer u een route aanvraagt, kunt u het volgende opgeven:

  • U kunt alleen een begin- en eindpunt opgeven, of u kunt een reeks waypoints opgeven om de route te berekenen.

    Stop waypoints voegen extra routeonderdelen toe, elk met hun eigen routebeschrijving. Als u waypoints wilt opgeven, gebruikt u een van de GetDrivingRouteFromWaypointsAsync overloads.

    Via waypoint definieert tussenliggende locaties tussen stop waypoints. Ze voegen geen trajectdelen toe. Ze zijn slechts tussenpunten waar een route doorheen moet. Als u via waypoints wilt opgeven, gebruikt u een van de GetDrivingRouteFromEnhancedWaypointsAsync overload-functies.

  • U kunt optimalisaties opgeven (bijvoorbeeld: de afstand minimaliseren).

  • U kunt beperkingen opgeven (bijvoorbeeld: snelwegen vermijden).

Routebeschrijving weergeven

Het MapRouteFinderResult-object bevat een MapRoute-object dat u kunt openen via de eigenschap Route.

De berekende MapRoute- heeft eigenschappen die de tijd geven om de route af te leggen, de lengte van de route, en de verzameling van MapRouteLeg objecten die de delen van de route bevatten. Elk MapRouteLeg-object bevat een verzameling MapRouteManeuver--objecten. Het MapRouteManeuver-object bevat aanwijzingen die u kunt openen via de eigenschap InstructionText.

Belangrijk

U moet een verificatiesleutel voor kaarten opgeven voordat u kaartservices kunt gebruiken. Zie Een verificatiesleutel voor kaarten aanvragenvoor meer informatie.

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 dit voorbeeld worden de volgende resultaten weergegeven in het tekstvak tbOutputText.

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.

Routes weergeven

Als u een MapRoute- wilt weergeven op een MapControl-, maakt u een MapRouteView- met de MapRoute-. Voeg vervolgens de MapRouteView- toe aan de verzameling Routes van de MapControl-.

Belangrijk

U moet een verificatiesleutel voor kaarten opgeven voordat u kaartservices of het kaartbeheer kunt gebruiken. Zie Een verificatiesleutel voor kaarten aanvragenvoor meer informatie.

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 dit voorbeeld wordt het volgende weergegeven op een MapControl- met de naam MapWithRoute.

kaartbeheer met route weergegeven.

Hier volgt een versie van dit voorbeeld die gebruikmaakt van een via waypoint tussen twee 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);
  }
}