Пример #1
0
        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
            });
        }
Пример #2
0
        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);
        }