示例#1
0
        public void AddWeatherGraph(string cityName, string parameters, DateTime startTime, DateTime endTime,
                                    string graphName, WeatherType.ParameterEnum parameterType, int interval)
        {
            if (cityName == null || cityName == "")
            {
                throw new Exception("Please give a name of cities in Finland");
            }
            Dictionary <string, IDataSeries> combined_graphs = new Dictionary <string, IDataSeries>();

            try
            {
                TimeHandler.IsTimeValid(startTime, endTime);
                IsPlotNameValid(graphName);
                combined_graphs = FMI.GetAllData(startTime, endTime, interval, graphName, cityName, parameters, parameterType);
            }
            catch (AggregateException ae)
            {
                Console.WriteLine("FMIAction failed:");
                foreach (var ex in ae.InnerExceptions)
                {
                    Console.WriteLine(ex.Message);
                    throw new Exception(ex.Message);
                }
            }
            foreach (var graph in combined_graphs)
            {
                graph.Value.Name = graphName + " (" + graph.Value.Name + ")";
                DataPlot.Data.Add(graph.Value);
            }
        }
示例#2
0
        /*
         * Splits the FMI request, if it's too long and calls GetSingleData n times, where n
         * is number of splits. Combines all fetched graphs based on parameter
         * Returns a dictionary of combined graphs sorted by parameter.
         */
        public static Dictionary <string, IDataSeries> GetAllData(DateTime startTime, DateTime endTime, int interval,
                                                                  string graphName, string cityName, string parameters, WeatherType.ParameterEnum parameterType)
        {
            // This dict is returned
            Dictionary <string, IDataSeries> combined_graphs = new Dictionary <string, IDataSeries>();

            if (TimeHandler.ForecastTooFar(startTime))
            {
                return(combined_graphs);
            }

            string step = interval.ToString();

            Timestep = step;
            if (TimeHandler.DataTooBig(startTime, endTime, interval))
            {
                return(combined_graphs);
            }

            List <Tuple <DateTime, DateTime> > timepairs = TimeHandler.SplitFMIRequest(startTime, endTime);

            foreach (var timepair in timepairs)
            {
                StartTime = TimeHandler.ConvertToLocalTime(timepair.Item1).ToString("yyyy-MM-ddTHH:mm:ssZ");
                EndTime   = TimeHandler.ConvertToLocalTime(timepair.Item2).ToString("yyyy-MM-ddTHH:mm:ssZ");

                Place      = cityName;
                Parameters = parameters;

                string query;
                if (parameterType == WeatherType.ParameterEnum.Forecast)
                {
                    query = BuildQuery("forecast::hirlam::surface::point");
                }
                else
                {
                    query = BuildQuery("observations::weather");
                }
                string request = BuildRequest(query);
                Console.WriteLine(request);

                // This flag makes sure that the missing graphs warning is shown only once
                bool is_first = false;
                if (timepairs.First() == timepair)
                {
                    is_first = true;
                }

                var series_list_task = Task.Run(() => GetSingleData(request, is_first));
                series_list_task.Wait();
                var series_list = series_list_task.Result;

                foreach (var series in series_list)
                {
                    AddToDict(ref combined_graphs, series);
                }
            }
            return(combined_graphs);
        }
 public List <WeatherType> GetUpdatedWeatherTypes(WeatherType.ParameterEnum weatherParameter)
 {
     return(WeatherTypes.FindAll(weatherType =>
                                 weatherType.ParameterType
                                 == weatherParameter));
 }