Exemplo n.º 1
0
        public static IEnumerable<DagligPuddervarsel> GetDailyPowderData(IEnumerable<DagligPuddervarsel> filteredPowderData)
        {
            var today = DateTime.Now;
            var todayStart = DateTime.Now.AddHours(-(DateTime.Now.Hour + 1));
            var todayEnd = DateTime.Now.AddDays(1).AddHours(-(DateTime.Now.Hour + 1));

            const int days = 11;
            var dailyPowderData = new DagligPuddervarsel[days - 1];

            for (var i = 1; i < days; i++)
            {
                var dayPowderData = filteredPowderData.Where(p => p.From < todayEnd && p.From > todayStart);
                var totalPowder = dayPowderData.Sum(p => p.Precipitation);
                var temp = dayPowderData.Average(t => t.Temperature);
                
                var puddervarsel = new DagligPuddervarsel();
                puddervarsel.Precipitation = totalPowder;
                puddervarsel.Temperature = Math.Round(temp,1);
                puddervarsel.MaxTemperature = dayPowderData.Max(t => t.Temperature);
                puddervarsel.From = today;
                dailyPowderData[i - 1] = puddervarsel;
                today = today.AddDays(1);
                todayStart = todayStart.AddDays(1);
                todayEnd = todayEnd.AddDays(1);
            }
            return dailyPowderData;
        }
Exemplo n.º 2
0
        public static IEnumerable<DagligPuddervarsel> GetRelevantPowderData(DagligPuddervarsel[] forecast)
        {
            var filteredForecast = forecast.Where(p => p != null && ((p.From.Hour == 12 && p.To.Hour == 18) ||
                (p.From.Hour == 00 && p.To.Hour == 06) || (p.From.Hour == 06 && p.To.Hour == 12) ||
                (p.From.Hour == 18 && p.To.Hour == 00))).OrderBy(q => q.From);

            var longDate = DateTime.Now.AddDays(3).AddHours(-DateTime.Now.Hour);
            var longForecast = forecast.Where(p => p != null && p.From > longDate && ((p.From.Hour == 01 && p.To.Hour == 07) ||
                (p.From.Hour == 07 && p.To.Hour == 13) || (p.From.Hour == 13 && p.To.Hour == 19) ||
                (p.From.Hour == 19 && p.To.Hour == 01))).OrderBy(q => q.From);
            var totalForecast = filteredForecast.Concat(longForecast);
            return totalForecast;
        }
Exemplo n.º 3
0
        public static DagligPuddervarsel Create(IEnumerable<DetailedPowder> detailedPowderList)
        {
            if (detailedPowderList == null) return null;

            var dagligPudder = new DagligPuddervarsel();
            dagligPudder.DetailedPowderList = detailedPowderList;
            dagligPudder.Day = detailedPowderList.FirstOrDefault().From;
            dagligPudder.Precipitation = detailedPowderList.Sum(t => t.Precipitation);

            dagligPudder.Powder = detailedPowderList.Sum(periode => periode.Powder);
            var temp = detailedPowderList.Average(t => t.Temperature);
            dagligPudder.AverageTemperature = Math.Round(temp, 1);
            dagligPudder.MaxTemperature = detailedPowderList.Max(t => t.Temperature);
            return dagligPudder;
        }
Exemplo n.º 4
0
        public DagligPuddervarsel[] ProcessResponse(XElement forecastResponse)
        {

            var items = forecastResponse.DescendantsAndSelf("time");

            var xElements = items as XElement[] ?? items.ToArray();
            var powderForecastDays = new DagligPuddervarsel[xElements.Count()];
            var i = 0;
            string temperature = string.Empty;
            foreach (var xElement in xElements)
            {
                var from = XmlHelper.GetAttributeValue("from", xElement);
                var to = XmlHelper.GetAttributeValue("to", xElement);
                var precipitation = XmlHelper.GetElementValue("location", "precipitation", "value", xElement);
                var temp = XmlHelper.GetElementValue("location", "temperature", "value", xElement);
                if (!string.IsNullOrEmpty(temp))
                    temperature = temp;
                if (!string.IsNullOrEmpty(precipitation))
                {
                    const string format = "yyyy-MM-ddTHH:mm:ssZ";
                    var powderForecast = new DagligPuddervarsel();

                    var ciNo = new CultureInfo("nb-NO");
                    powderForecast.Precipitation = Convert.ToDecimal((string) precipitation.Replace('.', ','), ciNo);
                    powderForecast.From = DateTime.ParseExact(from, format, ciNo);
                    powderForecast.To = DateTime.ParseExact(to, format, ciNo);

                    
                    if (!string.IsNullOrEmpty(temperature))
                        powderForecast.Temperature = Math.Round(Convert.ToDecimal((string)temperature.Replace('.', ','), ciNo),1);

                    powderForecastDays[i] = powderForecast;
                    i++;
                }
            }
            return powderForecastDays;
        }
Exemplo n.º 5
0
        public DagligPuddervarsel[] ProcessResponse(XElement forecastResponse)
        {
            var timeInfo = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
            var ciNo = new CultureInfo("nb-NO");
            var items = forecastResponse.DescendantsAndSelf("time");
            var t = 0;
            var xElements = items as XElement[] ?? items.ToArray();
            var powderForecastDays = new DagligPuddervarsel[12];
            var detailedPowderList = new DetailedPowder[4];
            var detailedTeller = 0;
            var i = 0;

            var lastDay = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"));

            var temperatureList = new Dictionary<string, string>();
            foreach (var xElement in xElements)
            {
                //var fromDateTime = TimeZoneInfo.ConvertTime(DateTime.ParseExact(XmlHelper.GetAttributeValue("from", xElement), Format, ciNo), TimeZoneInfo.Local, timeInfo).ToUniversalTime();
                //var toDateTime = TimeZoneInfo.ConvertTime(DateTime.ParseExact(XmlHelper.GetAttributeValue("to", xElement), Format, ciNo), TimeZoneInfo.Local, timeInfo).ToUniversalTime();

                var fromDateTime = GetExactDateTime(XmlHelper.GetAttributeValue("from", xElement));
                var toDateTime = GetExactDateTime(XmlHelper.GetAttributeValue("to", xElement));

                if (IsRelevant(fromDateTime, toDateTime))
                {
                    //Ny DagligPuddervarsel
                    if (fromDateTime.Date > lastDay)
                    {
                        powderForecastDays[i] = DagligPuddervarsel.Create(detailedPowderList.Where(p => p != null)); ;
                        detailedPowderList = new DetailedPowder[4];
                        i++;
                        detailedTeller = 0;
                        lastDay = lastDay.AddDays(1);
                    }

                    var detailedPowder = new DetailedPowder();
                    var precipitation = XmlHelper.GetElementValue("location", "precipitation", "value", xElement);
                    detailedPowder.Precipitation = Convert.ToDecimal(precipitation.Replace('.', ','), ciNo);

                    //if (!System.Diagnostics.Debugger.IsAttached)
                    //{
                    //    detailedPowder.From = fromDateTime.AddHours(-2);
                    //    detailedPowder.To = toDateTime.AddHours(-2);
                    //}
                    //else
                    //{
                    //    detailedPowder.From = fromDateTime;
                    //    detailedPowder.To = toDateTime;
                    //}
                    detailedPowder.From = fromDateTime;
                    detailedPowder.To = toDateTime;

                    detailedPowder.Temperature = GetAverageTemp(temperatureList, ciNo);

                    detailedPowder.Powder = detailedPowder.Temperature < 2 ? detailedPowder.Precipitation : 0;

                    temperatureList = new Dictionary<string, string>();
                    if (detailedTeller < detailedPowderList.Count())
                        detailedPowderList[detailedTeller] = detailedPowder;

                    detailedTeller++;
                }

                var temperature = XmlHelper.GetElementValue("location", "temperature", "value", xElement);
                if (!string.IsNullOrEmpty(temperature))
                {
                    temperatureList.Add(fromDateTime.ToString(), temperature);
                }

            }
            return powderForecastDays;
        }