예제 #1
0
        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);
        }
예제 #2
0
 public TripLength CalculateDistance(Location startLocation, Location endLocation)
 {
     return(CalculateDistance(startLocation, endLocation, TimeSpan.Zero));
 }