private async Task <RouteOptions> ProcessJourney(int journeyId, TimeSpan startTime, bool showPollution, bool showSchools) { //var journeyOptions = _journeyRepo.GetJourney(journeyId); var journeyOptions = await GetJourney(journeyId, 0, 0, 0, 0); int i = 1; IList <EnrichedRoute> enrichedRoute = new List <EnrichedRoute>(); foreach (var journeyOption in journeyOptions.Routes) { var er = new EnrichedRoute() { Label = $"Option:{i}", RouteMarkers = journeyOption.Coordinates.Select(x => new MapApiCore.Models.Marker(new Coordinate(x.Longitude, x.Latitude), 0, string.Empty)).ToList(), PollutionMarkers = GetPollutionMarkersForRoute(journeyOption.Coordinates, startTime), SchoolMarkers = GetSchoolMarkersForRoute(journeyOption.Coordinates, MarkerIntersectionRangeInMetres, startTime) }; i++; er.Distance = Math.Round(journeyOption.Distance * 10 * 0.0006213712m, 2); er.Duration = journeyOption.Duration; er.ModeOfTransport = journeyOption.ModeOfTransport; var averageAirQualityIndex = er.PollutionMarkers.Average(p => (decimal)p.Value); var pollutionFactor = showPollution ? (int)Math.Ceiling(averageAirQualityIndex * 20) : 0; var schoolFactor = showSchools ? er.SchoolMarkers.Count * 40 : 0; Color col; if (journeyOption.ModeOfTransport == "bicycle") { er.GreenScore = 95; er.Cost = 0; col = Color.DarkGreen; er.Colour = "FF" + col.B.ToString("X2") + col.G.ToString("X2") + col.R.ToString("X2"); } if (journeyOption.ModeOfTransport == "car") { er.GreenScore = Math.Clamp(100 - pollutionFactor - schoolFactor, 0, 75); er.Cost = Math.Round(((10 - ((decimal)er.GreenScore) / 10)) * er.Distance, 2); col = GetBlendedColor(er.GreenScore); er.Colour = "FF" + col.B.ToString("X2") + col.G.ToString("X2") + col.R.ToString("X2"); } enrichedRoute.Add(er); } return(new RouteOptions() { StartLocation = journeyOptions.Start, EndLocation = journeyOptions.End, EnrichedRoute = enrichedRoute }); }
private static string CalculateTime(EnrichedRoute enrichedRoute) { var duration = string.Empty; if (!string.IsNullOrWhiteSpace(enrichedRoute.Duration)) { int min = int.Parse(enrichedRoute.Duration); duration = $"{min} m"; if (min > 59) { int hr = min / 60; int mod = min % 60; duration = mod > 0 ? $"{hr} h {mod} m" : $"{hr} h"; } } return(duration); }