in LocationHelper/LocationHelper.cs [213:247]
public static async Task UpdateTravelInfoAsync(LocationData location, LocationData currentLocation)
{
var routeResultTask = MapRouteFinder.GetDrivingRouteAsync(
currentLocation.Geopoint, location.Geopoint,
MapRouteOptimization.TimeWithTraffic, MapRouteRestrictions.None);
var routeResultWithoutTrafficTask = MapRouteFinder.GetDrivingRouteAsync(
currentLocation.Geopoint, location.Geopoint,
MapRouteOptimization.Time, MapRouteRestrictions.None);
MapRouteFinderResult routeResult = await routeResultTask;
MapRouteFinderResult routeResultWithoutTraffic = await routeResultWithoutTrafficTask;
if (routeResult.Status == MapRouteFinderStatus.Success)
{
location.FastestRoute = routeResult.Route;
location.CurrentTravelDistance = Math.Round(routeResult.Route.LengthInMeters * 0.00062137, 1); // convert to miles
location.CurrentTravelTime = (int)routeResult.Route.EstimatedDuration.TotalMinutes;
location.Timestamp = DateTimeOffset.Now;
if (routeResultWithoutTraffic.Status == MapRouteFinderStatus.Success)
{
location.CurrentTravelTimeWithoutTraffic = routeResultWithoutTraffic.Route.EstimatedDuration.Minutes;
}
else
{
// Fall back to the with-traffic value if the request fails.
location.CurrentTravelTimeWithoutTraffic = routeResult.Route.EstimatedDuration.Minutes;
}
}
else if (routeResult.Status == MapRouteFinderStatus.UnknownError ||
routeResult.Status == MapRouteFinderStatus.InvalidCredentials ||
routeResult.Status == MapRouteFinderStatus.NetworkFailure ||
routeResult.Status == MapRouteFinderStatus.NotSupported)
{
throw new Exception(routeFinderUnavailableMessage);
}
}