public TripLength CalculateDistance(Location startLocation, Location endLocation, TimeSpan startTime) { var startLocationDomain = _mapperService.MapModelToDomain(startLocation); startLocationDomain.Latitude = startLocation.Latitude; startLocationDomain.Longitude = startLocation.Longitude; var endLocationDomain = _mapperService.MapModelToDomain(endLocation); endLocationDomain.Latitude = endLocation.Latitude; endLocationDomain.Longitude = endLocation.Longitude; var locationDistance = _locationDistanceService.Get(startLocationDomain, endLocationDomain); TripLength result; if (locationDistance != null) { var hourIndex = (int)startTime.TotalHours; while (hourIndex >= 24) { hourIndex = hourIndex - 24; } long travelTime = locationDistance.Hours[hourIndex].TravelTime.Value; if (travelTime == 0 && locationDistance.TravelTime.HasValue) { travelTime = locationDistance.TravelTime.Value; } long distance = 0; if (locationDistance.Distance.HasValue) { distance = (long)locationDistance.Distance.Value; } result = new TripLength(distance, TimeSpan.FromSeconds(travelTime)); } else { // Use fallback service result = _fallbackDistanceService.CalculateDistance(startLocation, endLocation, startTime); } return(result); }
public TripLength CalculateDistance(Location startLocation, Location endLocation) { return(CalculateDistance(startLocation, endLocation, TimeSpan.Zero)); }