void CalculateRoute(BingTravelMode mode) { if (isBusy) { return; } isBusy = true; var waypoints = new[] { new RouteWaypoint(StartingAddress, StartingLocation), new RouteWaypoint(DestinationAddress, DestinationLocation) }; var unit = DistanceMeasureUnit.Mile; var optimization = BingRouteOptimization.MinimizeTime; RouteService.CalculateRouteAsync(waypoints, unit, optimization, mode).ContinueWith(t => { if (t.Result.ResultCode == RequestResultCode.Success && t.Result.RouteResults.Count > 0) { BingRouteResult route = t.Result.RouteResults.First(); if (route.Legs.Count > 0) { BingRouteLeg leg = route.Legs.First(); IsWalkingAvailable = (leg.Distance > maximumWalkingDistance) ? false : true; GeoPoint startLocation = leg.Itinerary.First().Location; GeoPoint endLocation = leg.Itinerary.Last().Location; CenterPoint = new GeoPoint((startLocation.Latitude + endLocation.Latitude) / 2, (startLocation.Longitude + endLocation.Longitude) / 2); ActiveItinerary = leg.Itinerary.Select(item => new ItineraryItemViewModel(item)).ToList(); } } isBusy = false; }, TaskScheduler.FromCurrentSynchronizationContext()); }
public void SetWalkingTravelMode() { TravelMode = BingTravelMode.Walking; }
public void SetDrivingTravelMode() { TravelMode = BingTravelMode.Driving; }
public Task <RouteCalculationResult> CalculateRouteAsync(IEnumerable <RouteWaypoint> waypoints, DistanceMeasureUnit unit, BingRouteOptimization optimization, BingTravelMode mode) { taskSource = new TaskCompletionSource <RouteCalculationResult>(); Provider.RouteOptions = new BingRouteOptions { Mode = mode, DistanceUnit = unit, RouteOptimization = optimization }; Provider.CalculateRoute(waypoints.ToList()); Provider.RouteCalculated += Provider_RouteCalculated; return(taskSource.Task); }