コード例 #1
0
        public static List <WeatherStation> ProcessWeatherData(ShapefileConverter shapefile)
        {
            var dataItems = new List <WeatherStation>();

            foreach (ShapefileRecord record in shapefile)
            {
                var item = new WeatherStation();
                if (record.Fields != null)
                {
                    // get geo-location from shape file (SHP)
                    item.Longitude = record.Points[0][0].X;
                    item.Latitude  = record.Points[0][0].Y;
                    // get data about a location from database file (DBF)
                    if (record.Fields.ContainsKey("COUNTRY_NA"))
                    {
                        item.CountryName = (string)(record.Fields["COUNTRY_NA"]);
                    }
                    if (record.Fields.ContainsKey("NAME"))
                    {
                        item.StationName = (string)(record.Fields["NAME"]);
                    }
                    item.Weather.WeatherCondition = WeatherGenerator.GenerateWeatherCondition(item);
                    item.Weather.Temperature      = WeatherGenerator.GenerateTemperature(item);
                    // add an item to data collection
                    dataItems.Add(item);
                }
            }
            return(dataItems);
        }
コード例 #2
0
        static async Task Main(string[] args)
        {
            WeatherGenerator weather    = new WeatherGenerator();
            string           weatherNow = await weather.GetWeatherAsync();

            Console.WriteLine(weatherNow);
        }
コード例 #3
0
        public String Get(String id, String name, double lat, double lon, double elev)
        {
            String   msg;
            String   options = "Shore=G:/Travaux/BioSIM_API/Layers/Shore.ann&Normals=G:/Travaux/BioSIM_API/Weather/Normals/World 1991-2020.NormalsDB.bin.gz&Daily=G:/Travaux/BioSIM_API/Weather/Daily/Canada-USA 2018-2019.DailyDB.bin.gz";
            Location loc     = new Location(id, name, lat, lon, elev);


            if (!m_WG.ContainsKey(options))
            {
                System.Diagnostics.Debug.WriteLine("Initialize Weather Generator");
                m_WG[options] = new WeatherGenerator("WG" + m_WG.Count.ToString());
                msg           = m_WG[options].Initialize(options);

                if (msg != "Success")
                {
                    return(msg);
                }
            }


            WeatherGenerator WG = m_WG[options];

            ModelExecution model = new ModelExecution("Model1");

            msg = model.Initialize("Model=G:/Travaux/BioSIM_API/Models/DegreeDay (Annual).mdl");
            if (msg != "Success")
            {
                return(msg);
            }

            string variables    = model.GetWeatherVariablesNeeded();
            string parameters   = model.GetDefaultParameters();
            bool   compress     = true;
            string compress_str = compress ? "1" : "0";

            //Generate weather for 2018-2019
            TeleIO WGout = WG.Generate("Compress=1" + compress_str + "&Variables=" + variables + "&ID=" + id + "&Name=" + name + "&Latitude=" + lat + "&Longitude=" + lon + "&Elevation=" + elev + "&First_year=2018&Last_year=2019&Replications=1");

            if (WGout.msg != "Success")
            {
                return(WGout.msg);
            }


            TeleIO modelOut = model.Execute("Compress=0", WGout);//I think that Web API automatically compress text

            if (modelOut.msg != "Success")
            {
                return(modelOut.msg);
            }


            return(System.Text.Encoding.UTF8.GetString(modelOut.data));
        }
        public async IAsyncEnumerable <QueryResult <WeatherForecast[]?>?> GetWeatherForecastAsync(
            DateTime startDate)
        {
            yield return(new QueryResult <WeatherForecast[]?>()
            {
                IsLoading = true
            });

            var ret = await WeatherGenerator.GetWeather(startDate);

            yield return(new QueryResult <WeatherForecast[]?>()
            {
                Data = ret,
                IsLoading = false
            });
        }
コード例 #5
0
        public static void GenerateWeatherFromDateTime(this DateTime dateTime, WeatherNotesWindow window, RoutedEventArgs e)
        {
            DayData day;

            WeatherData[] weatherDatas = null;

            if (window.CalendarData.ContainsKey(dateTime))
            {
                day = window.CalendarData[dateTime];

                if (!day.WeatherGenerated)
                {
                    weatherDatas = WeatherGenerator.GenerateWeather(dateTime, day.Weather);
                    day.Weather  = weatherDatas[0];
                }
            }
            else
            {
                weatherDatas = WeatherGenerator.GenerateWeather(dateTime);

                day = new DayData(dateTime, window.TbxSelectedDayNotes.Text, weatherDatas[0]);

                window.CalendarData.Add(dateTime, day);
            }

            DateTime prevDate = dateTime.AddDays(-1);

            if (!day.WeatherGenerated && window.CalendarData.ContainsKey(prevDate))
            {
                DayData prevDay = window.CalendarData[prevDate];

                if (prevDay.WeatherGenerated)
                {
                    day.Weather.Temperature = (day.Weather.Temperature + prevDay.Weather.Temperature) / 2.0;
                    day.Weather.Precipitation.SnowAccumulation = day.Weather.Precipitation.SnowAccumulation + prevDay.Weather.Precipitation.SnowAccumulation;
                    PrecipitationData.MeltSnowOverDay(day.Weather);
                }
            }

            day.WeatherGenerated = true;

            window.CalendarData.SetDictionaryWeatherDatas(dateTime, weatherDatas);

            //dateTime.SetSelectedDayWeatherNotes(window.CalendarData, window.TbxSelectedDayNotes, window.LblSelectedDayWeather);

            e.Handled = true;
        }
コード例 #6
0
        static void Main(string[] args)
        {
            string[] arguments = Environment.GetCommandLineArgs();

            string exe_path = System.Reflection.Assembly.GetExecutingAssembly().Location;

            exe_path = System.IO.Path.GetDirectoryName(exe_path);
            Console.WriteLine("Application path: " + exe_path);

            //Initialized static data
            string globa_data = arguments[1];
            string options    = arguments[2];

            Console.WriteLine("trying options: " + globa_data);
            Console.WriteLine("trying options: " + options);


            var    watch = System.Diagnostics.Stopwatch.StartNew();
            string init  = new BioSIM_API_GlobalData().InitGlobalData(globa_data);

            watch.Stop();
            Console.WriteLine("Time to initialize global data: " + watch.ElapsedMilliseconds + " ms");
            watch.Restart();



            Console.WriteLine("Initialize Weather Generator");
            WeatherGenerator WG  = new WeatherGenerator("WG1");
            string           msg = WG.Initialize(options);

            Console.WriteLine(msg);

            watch.Stop();
            Console.WriteLine("Time to initialize Weather Generator: " + watch.ElapsedMilliseconds + " ms");
            watch.Restart();

            if (msg == "Success")
            {
                Console.WriteLine("Initialize DegreeDay model");
                ModelExecution model = new ModelExecution("Model1");
                msg = model.Initialize("Model=DegreeDay (Annual).mdl");
                Console.WriteLine(msg);

                watch.Stop();
                Console.WriteLine("Time to initialize DegreeDay model: " + watch.ElapsedMilliseconds + " ms");
                watch.Restart();

                if (msg == "Success")
                {
                    string variables    = model.GetWeatherVariablesNeeded();
                    string parameters   = model.GetDefaultParameters();
                    bool   compress     = false;
                    string compress_str = compress ? "1" : "0";


                    //&Elevation=2800
                    //example of extracting weather from
                    Console.WriteLine("Generate weather for 2018-2019, 1 replications");
                    TeleIO WGout = WG.Generate("Compress=" + compress_str + "&Variables=" + variables + "&ID=1&Name=Logan&Latitude=41.73333333&Longitude=-111.8&Elevation=120&First_year=2018&Last_year=2019&Replications=1");
                    Console.WriteLine(WGout.msg);



                    // the code that you want to measure comes here
                    watch.Stop();
                    Console.WriteLine("Time to generate weather: " + watch.ElapsedMilliseconds + " ms");
                    watch.Restart();

                    if (msg == "Success")
                    {
                        Console.WriteLine("Execute DegreeDay Model");
                        TeleIO modelOut = model.Execute("Compress=" + compress_str, WGout);
                        Console.WriteLine(modelOut.msg);

                        string s = System.Text.Encoding.UTF8.GetString(modelOut.data);
                        Console.WriteLine(s);

                        watch.Stop();
                        Console.WriteLine("Time to run DD model: " + watch.ElapsedMilliseconds + " ms");
                        watch.Restart();


                        Console.WriteLine();
                        Console.WriteLine();
                        Console.WriteLine("Second generation");
                        WGout = WG.Generate("Compress=" + compress_str + "&Variables=" + variables + "&ID=1&Name=Logan&Latitude=41.73333333&Longitude=-111.8&Elevation=120&First_year=2018&Last_year=2019&Replications=1");

                        watch.Stop();
                        Console.WriteLine("Time to generate weather: " + watch.ElapsedMilliseconds + " ms");
                        watch.Restart();

                        modelOut = model.Execute("Compress=" + compress_str, WGout);
                        Console.WriteLine(s);

                        watch.Stop();
                        Console.WriteLine("Time to run DD model: " + watch.ElapsedMilliseconds + " ms");
                    }
                }
            }
            //string path_out = path + "\\test" + (compress ? ".gz" : ".csv");
            //System.IO.FileStream fs = System.IO.File.Create(path_out);
            //System.IO.BufferedStream file = fs.;
            //array < unsigned char>^ arr = gcnew array < unsigned char> (10);
            //file->Read(arr, 0, 10);
            //fs.Write(modelOut.data, 0, modelOut.data.Length);
            //fs.Close();
        }
コード例 #7
0
        public String Get(String shore, String normals, String daily)
        {
            String options = "Shore=" + shore + "&Normals=" + normals + "&Daily=" + daily;

            var    watch = System.Diagnostics.Stopwatch.StartNew();
            String msg;
            // return "Lat: " + lat + "     lon: "+lon +"     Year:"+ year;

            //string exe_path = System.Reflection.Assembly.GetExecutingAssembly().Location;
            //exe_path = System.IO.Path.GetDirectoryName(exe_path);
            String exe_path = "G:\\Travaux\\BioSIM_API";

            //string path = Environment.GetEnvironmentVariable("PATH");
            //Environment.SetEnvironmentVariable("PATH", exe_path + ";" + path);



            //Environment.CurrentDirectory = exe_path;
            // SetDllDirectory();
            System.Diagnostics.Debug.WriteLine("trying path: " + exe_path);
            System.Diagnostics.Debug.WriteLine("trying options: " + options);

            if (!m_WG.ContainsKey(options))
            {
                System.Diagnostics.Debug.WriteLine("Initialize Weather Generator");
                watch.Restart();
                m_WG[options] = new WeatherGenerator("WG" + m_WG.Count.ToString());
                msg           = m_WG[options].Initialize(options);
                System.Diagnostics.Debug.WriteLine(msg);
                System.Diagnostics.Debug.WriteLine("Time to initialize Weather Generator: " + watch.ElapsedMilliseconds + " ms");

                if (msg != "Success")
                {
                    return(msg);
                }
            }


            WeatherGenerator WG = m_WG[options];


            System.Diagnostics.Debug.WriteLine("Initialize DegreeDay model");
            watch.Restart();
            ModelExecution model = new ModelExecution("Model1");

            msg = model.Initialize("Model=" + exe_path + "\\Models\\DegreeDay (Annual).mdl");
            System.Diagnostics.Debug.WriteLine(msg);
            System.Diagnostics.Debug.WriteLine("Time to initialize DegreeDay model: " + watch.ElapsedMilliseconds + " ms");
            if (msg != "Success")
            {
                return(msg);
            }

            string variables    = model.GetWeatherVariablesNeeded();
            string parameters   = model.GetDefaultParameters();
            bool   compress     = true;
            string compress_str = compress ? "1" : "0";


            //Generate weather for 2018-2019
            System.Diagnostics.Debug.WriteLine("Generate weather for 2018-2019, 1 replications");
            watch.Restart();
            TeleIO WGout = WG.Generate("Compress=" + compress_str + "&Variables=" + variables + "&ID=1&Name=Logan&Latitude=41.73333333&Longitude=-111.8&Elevation=120&First_year=2018&Last_year=2019&Replications=1");

            System.Diagnostics.Debug.WriteLine(WGout.msg);
            System.Diagnostics.Debug.WriteLine("Time to generate weather: " + watch.ElapsedMilliseconds + " ms");
            if (WGout.msg != "Success")
            {
                return(WGout.msg);
            }

            //execute DD model
            System.Diagnostics.Debug.WriteLine("Execute DegreeDay Model");
            watch.Restart();
            TeleIO modelOut = model.Execute("Compress=0", WGout);//I think that Web API automatically compress text

            System.Diagnostics.Debug.WriteLine(modelOut.msg);
            System.Diagnostics.Debug.WriteLine("Time to run DD model: " + watch.ElapsedMilliseconds + " ms");

            if (modelOut.msg != "Success")
            {
                return(modelOut.msg);
            }


            return(System.Text.Encoding.UTF8.GetString(modelOut.data));
        }