示例#1
0
        private LoksimFile LoadFile(L3dFilePath path)
        {
            LoksimFile file = null;

            try
            {
                switch (System.IO.Path.GetExtension(path.AbsolutePath).ToLower())
                {
                case ".l3dwth":
                {
                    WeatherFile f = new WeatherFile();
                    f.LoadFromFile(path);
                    file = f;
                }
                break;

                case ".l3dsky":
                {
                    SkyFile f = new SkyFile();
                    f.LoadFromFile(path);
                    file = f;
                }
                break;

                case ".l3dfst":
                {
                    DrivingCabFile f = new DrivingCabFile();
                    f.LoadFromFile(path);
                    file = f;
                }
                break;

                default:
                    Debug.Assert(false, "Unknown File Type");
                    break;
                }
                this.Title = Loksim3D.WetterEdit.Resources.Strings.AppName + " [" + path.Filename + "]";
                Settings.RegistrySettings.Default.AddRecentFile(path);
            }
            catch (Exception ex)
            {
                Mouse.OverrideCursor = null;
                MessageBox.Show(String.Format(Loksim3D.WetterEdit.Resources.Strings.ErrorLoadingFile_0_Msg_1_, path.Filename, ex.Message),
                                Loksim3D.WetterEdit.Resources.Strings.AppName, MessageBoxButton.OK, MessageBoxImage.Error);
            }
            return(file);
        }
示例#2
0
        internal void CreateNewFile(string fileToOpen)
        {
            if (fileToOpen != null)
            {
                string     arg0 = _fileToOpen.Trim();
                LoksimFile file = null;
                switch (arg0.ToLower())
                {
                case "-l3dsky":
                    file = new SkyFile();
                    break;

                case "-l3dwth":
                    file = WeatherFile.CreateNewDefaultFile();
                    break;

                case "-l3dfst":
                    file = new DrivingCabFile();
                    break;

                default:
                    file = LoadFile(new L3dFilePath(arg0));
                    break;
                }
                if (file != null)
                {
                    SetCtrlAndViewModel(file);
                }
            }
#if DEBUG
            //TODO Just for driving cab dev

            /*
             * else
             * {
             *  LoksimFile f = new DrivingCabFile();
             *  SetCtrlAndViewModel(f);
             * }
             */
#endif
        }
示例#3
0
        public void GenerateWeatherFile50Years()
        {
            // name of old style validation xml file.
            // NB: This is a real YP validation XML file from 2004.
            string fileName = Path.Combine(filesDirectory, "TestValidation.xml");

            // Create a YieldProphet object from our YP xml file
            YieldProphet spec = YieldProphetUtility.YieldProphetFromFile(fileName);

            // Read in the rainfall data
            Utility.ApsimTextFile observedDataFile = new Utility.ApsimTextFile();
            observedDataFile.Open(Path.Combine(filesDirectory, "TestValidation.rain"));
            DataTable observedData = observedDataFile.ToTable();

            observedDataFile.Close();

            // Write the weather file.
            string      rainFileName = Path.Combine(workingDirectory, spec.Paddock[0].Name) + ".met";
            WeatherFile weatherFiles = new WeatherFile();

            weatherFiles.CreateLongTerm(rainFileName, spec.Paddock[0].StationNumber,
                                        spec.Paddock[0].StartSeasonDate,
                                        spec.Paddock[0].StartSeasonDate.AddDays(300),
                                        new DateTime(2004, 6, 1),
                                        observedData, 50);

            Assert.AreEqual(weatherFiles.FilesCreated.Length, 50);

            Assert.AreEqual(Path.GetFileName(weatherFiles.FilesCreated[0]), "2004;A and R Weidemann;Wep 11954.met");
            Utility.ApsimTextFile weatherFile = new Utility.ApsimTextFile();
            weatherFile.Open(Path.Combine(workingDirectory, weatherFiles.FilesCreated[0]));
            DataTable weatherData = weatherFile.ToTable();

            weatherFile.Close();
            Assert.AreEqual(weatherData.Rows.Count, 301);
            Assert.AreEqual(weatherData.Rows[0]["codes"], "SSSO");
            Assert.AreEqual(weatherData.Rows[61]["codes"], "SSSO");
            Assert.AreEqual(weatherData.Rows[62]["codes"], "HHHH");
        }
        private void ButtonOK_Click(object sender, RoutedEventArgs e)
        {
            ListViewItem it = listView.SelectedItem as ListViewItem;

            if (it != null && it.Tag != null)
            {
                switch (it.Tag.ToString())
                {
                case "l3dsky":
                    SelectedFile = new SkyFile();
                    break;

                case "l3dwth":
                    SelectedFile = WeatherFile.CreateNewDefaultFile();
                    break;

                case "l3dfst":
                    SelectedFile = new DrivingCabFile();
                    break;
                }
                DialogResult = true;
                Close();
            }
        }
示例#5
0
        public WeatherViewModel(WeatherFile weatherFile, Window parentWindow)
            : base(weatherFile, parentWindow)
        {
            _weatherFile = weatherFile;

            NewTimeRangeCmd = new RelayCommand(arg =>
            {
                _weatherFile.WeatherSet.Add(new WeatherTimeRange(WeatherFile));
                SelectedTimeRange = _weatherFile.WeatherSet.Last();
            }
                                               );

            DelTimeRangeCmd = new RelayCommand(arg =>
            {
                _weatherFile.WeatherSet.Remove(SelectedTimeRange);
            },
                                               arg =>
            {
                return(SelectedTimeRange != null);
            }
                                               );

            AddVariableCmd = new RelayCommand(arg =>
            {
                if (SelectedTimeRange != null)
                {
                    SelectedTimeRange.Variables.Add(new L3dVariable(WeatherFile, "Variable", string.Empty));
                    SelectedVariable = SelectedTimeRange.Variables.Last();
                }
            },
                                              arg =>
            {
                return(SelectedTimeRange != null);
            }
                                              );

            RemoveVariableCmd = new RelayCommand(arg =>
            {
                if (SelectedTimeRange != null && SelectedVariable != null)
                {
                    SelectedTimeRange.Variables.Remove(SelectedVariable);
                    SelectedVariable = null;
                }
            },
                                                 arg =>
            {
                return(SelectedTimeRange != null && SelectedVariable != null);
            }
                                                 );

            CopyTimeRange = new RelayCommand(arg =>
            {
                try
                {
                    if (SelectedTimeRange != null)
                    {
                        Clipboard.SetText(SelectedTimeRange.ConvertToXml().ToString(), TextDataFormat.UnicodeText);
                    }
                }
                catch (Exception)
                {
                    SystemSounds.Exclamation.Play();
                }
            },
                                             arg =>
            {
                return(SelectedTimeRange != null);
            }
                                             );

            CutTimeRange = new RelayCommand(arg =>
            {
                try
                {
                    if (SelectedTimeRange != null)
                    {
                        Clipboard.SetText(SelectedTimeRange.ConvertToXml().ToString(), TextDataFormat.UnicodeText);
                        _weatherFile.WeatherSet.Remove(SelectedTimeRange);
                    }
                }
                catch (Exception)
                {
                    SystemSounds.Exclamation.Play();
                }
            },
                                            arg =>
            {
                return(SelectedTimeRange != null);
            }
                                            );

            PasteTimeRange = new RelayCommand(arg =>
            {
                var w = WeatherTimeRange.ReadFromXml(Clipboard.GetText(), WeatherFile);
                if (w != null)
                {
                    _weatherFile.WeatherSet.Add(w);
                    SelectedTimeRange = w;
                }
            },
                                              arg =>
            {
                try
                {
                    return(Clipboard.ContainsText() && WeatherTimeRange.ReadFromXml(Clipboard.GetText(), WeatherFile) != null);
                }
                catch (Exception)
                {
                    return(false);
                }
            }
                                              );

            SortTimeRangesCmd = new RelayCommand(arg =>
            {
                string sortCol = (string)arg;
                _timerangesView.SortDescriptions.Clear();

                if (_timerangesSortAsc)
                {
                    _timerangesView.SortDescriptions.Add(new SortDescription(sortCol, ListSortDirection.Ascending));
                }
                else
                {
                    _timerangesView.SortDescriptions.Add(new SortDescription(sortCol, ListSortDirection.Descending));
                }
                _timerangesSortAsc = !_timerangesSortAsc;
            }
                                                 );

            _weatherCtrl             = new WeatherCtrl();
            _weatherCtrl.WeatherFile = _weatherFile;

            _timerangesView        = new CollectionViewSource();
            _timerangesView.Source = _weatherFile.WeatherSet;

            SelectedTimeRange = _weatherFile.WeatherSet.FirstOrDefault();
        }
示例#6
0
        /// <summary>Get a rainfall forecast for the specified station number.</summary>
        /// <param name="stationNumber">The SILO station number.</param>
        /// <returns>Stream of data.</returns>
        public Stream Get(int stationNumber, DateTime nowDate, bool rainOnly)
        {
            // Get SILO data and write to a temporary file.
            DateTime     startDate        = new DateTime(1981, 1, 1);
            MemoryStream dataStream       = WeatherFile.ExtractMetStreamFromSILO(stationNumber, startDate, DateTime.Now);
            string       siloFileName     = GetTemporaryFileName();
            string       forecastFileName = null;

            try
            {
                File.WriteAllBytes(siloFileName, dataStream.ToArray());

                ChangeToWorkingDirectory();

                // Run the MatLab script over the temporary SILO file.
                POAMAforecast.Class1 forecast = new POAMAforecast.Class1();

                MWArray metFile      = new MWCharArray(siloFileName);
                MWArray rainfallOnly = new MWNumericArray((double)1);
                if (!rainOnly)
                {
                    rainfallOnly = new MWNumericArray((double)0);
                }
                MWArray writeFiles = new MWNumericArray((double)1.0);
                MWArray startDay   = new MWNumericArray(Convert.ToDouble(nowDate.Day));
                MWArray startMonth = new MWNumericArray(Convert.ToDouble(nowDate.Month));
                MWArray startYear  = new MWNumericArray(Convert.ToDouble(nowDate.Year));
                forecast.calsite(metFile, rainfallOnly, writeFiles, startDay, startMonth, startYear);

                forecastFileName = siloFileName.Replace(".sim", "") + "_" + nowDate.Year + ".sim";

                // Get rid of temporary file.
                File.Delete(siloFileName);

                if (WebOperationContext.Current != null && WebOperationContext.Current.OutgoingRequest != null)
                {
                    WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";
                }
                if (File.Exists(forecastFileName))
                {
                    // Read in the forecast data.
                    byte[] bytes = File.ReadAllBytes(forecastFileName);
                    return(new MemoryStream(bytes));
                }
                else
                {
                    return(null);
                }
            }
            finally
            {
                if (File.Exists(siloFileName))
                {
                    File.Delete(siloFileName);
                }
                if (forecastFileName != null && File.Exists(forecastFileName))
                {
                    File.Delete(forecastFileName);
                }
            }
        }
示例#7
0
        public static string ExportEPW(WeatherFile weatherfile, string outputPath)
        {
            if (weatherfile == null)
            {
                return("");
            }

            List <string> outputStrings = new List <string>();

            // header
            outputStrings.Add(String.Format("LOCATION,{0},{1},{2},{3},{4},{5},{6},{7},{8}",
                                            weatherfile.CityName,
                                            weatherfile.StateName,
                                            weatherfile.Country,
                                            "BHoM custom data",
                                            weatherfile.WMOID,
                                            weatherfile.SpaceTime.Location.Latitude,
                                            weatherfile.SpaceTime.Location.Longitude,
                                            weatherfile.SpaceTime.Location.UtcOffset,
                                            weatherfile.SpaceTime.Location.Elevation));
            outputStrings.Add("DESIGN CONDITIONS,0");
            outputStrings.Add("TYPICAL / EXTREME PERIODS,0");
            outputStrings.Add("GROUND TEMPERATURES,0");
            outputStrings.Add("HOLIDAYS / DAYLIGHT SAVINGS,No,0,0,0");
            outputStrings.Add(String.Format("COMMENTS 1, This file was generated using BHoM on {0}", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")));
            outputStrings.Add("COMMENTS 2, NA");
            outputStrings.Add("DATA PERIODS,1,1,Data,Sunday,1 / 1,12 / 31");

            // data
            int n = 0;

            for (DateTime date = new DateTime(2018, 1, 1, 0, 0, 0); date <= new DateTime(2018, 12, 31, 23, 30, 0); date = date.AddHours(1))
            {
                outputStrings.Add(
                    String.Format(
                        "{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21},{22},{23},{24},{25},{26},{27},{28},{29},{30},{31},{32},{33},{34}",
                        date.Year,
                        date.Month,
                        date.Day,
                        date.Hour + 1,
                        date.Minute + 60,
                        weatherfile.UncertaintyFlag[n],
                        weatherfile.DryBulbTemperature[n],
                        weatherfile.DewPointTemperature[n],
                        weatherfile.RelativeHumidity[n],
                        weatherfile.AtmosphericStationPressure[n],
                        weatherfile.ExtraterrestrialHorizontalRadiation[n],
                        weatherfile.ExtraterrestrialDirectNormalRadiation[n],
                        weatherfile.HorizontalInfraredRadiationIntensity[n],
                        weatherfile.GlobalHorizontalRadiation[n],
                        weatherfile.DirectNormalRadiation[n],
                        weatherfile.DiffuseHorizontalRadiation[n],
                        weatherfile.GlobalHorizontalIlluminance[n],
                        weatherfile.DirectNormalIlluminance[n],
                        weatherfile.DiffuseHorizontalIlluminance[n],
                        weatherfile.ZenithLuminance[n],
                        weatherfile.WindDirection[n],
                        weatherfile.WindSpeed[n],
                        weatherfile.TotalSkyCover[n],
                        weatherfile.OpaqueSkyCover[n],
                        weatherfile.Visibility[n],
                        weatherfile.CeilingHeight[n],
                        weatherfile.PresentWeatherObservation[n],
                        weatherfile.PresentWeatherCodes[n],
                        weatherfile.PrecipitableWater[n],
                        weatherfile.AerosolOpticalDepth[n],
                        weatherfile.SnowDepth[n],
                        weatherfile.DaysSinceLastSnowfall[n],
                        weatherfile.Albedo[n],
                        weatherfile.LiquidPrecipitationDepth[n],
                        weatherfile.LiquidPrecipitationQuantity[n]
                        )
                    );
                n += 1;
            }

            // write to file
            System.IO.File.WriteAllLines(outputPath, outputStrings);

            return(outputPath);
        }
示例#8
0
        public static WeatherFile ImportEPW(string filePath)
        {
            // Declare a weatherfile object to which attribtues can be passed
            WeatherFile epw = new WeatherFile();

            // Check that file passed exists, and exit if it doesn't while passing a record of your failure to the Error Log
            if (!File.Exists(filePath))
            {
                BH.Engine.Reflection.Compute.RecordError("File not found. Did you give the correct path?");
                return(null);
            }

            // Read all lines of file passed as strings
            string[] lines = System.IO.File.ReadAllLines(filePath);

            // Check to see if the file passed contains the requisite number of lines to parse as an EPW (> 8760)
            if (lines.Count() < 8760)
            {
                BH.Engine.Reflection.Compute.RecordError("The file passed has less than 8760 lines. Are you sure it's an EPW?");
                return(null);
            }

            // Get location data from the EPW file header and pass to EPW object
            List <String> header = lines[0].Split(',').ToList();

            // Check that file header is capable of being parsed as location data
            if (header.Count() < 10)
            {
                BH.Engine.Reflection.Compute.RecordError("The file passed has an odd header structure. Are you sure it's an EPW?");
                return(null);
            }

            // Load location (and UTC offset) data
            epw.CityName      = header[1];
            epw.StateName     = header[2];
            epw.Country       = header[3];
            epw.WeatherSource = header[4];
            epw.WMOID         = header[5];
            epw.SpaceTime     = new SpaceTime();
            epw.SpaceTime.Location.Latitude  = System.Convert.ToDouble(header[6]);
            epw.SpaceTime.Location.Longitude = System.Convert.ToDouble(header[7]);
            epw.SpaceTime.Location.UtcOffset = System.Convert.ToDouble(header[8]);
            epw.SpaceTime.Location.Elevation = System.Convert.ToDouble(header[9]);

            // Create a list of lists from the last 8760 lines of the file, each sublist representing values for an hour of the year
            List <List <String> > rawData = new List <List <String> >();

            for (int i = lines.Count() - 8760; i < lines.Count(); ++i)
            {
                rawData.Add(lines[i].Split(',').ToList());
            }

            // Transpose the list of lists into a list of annual hourly variables
            List <List <String> > data = BH.Engine.Data.Modify.TransposeRectangularCollection(rawData);

            try
            {
                // Populate the EPW object with the hourly variables data
                epw.Year   = data[0].ConvertAll(x => System.Convert.ToInt32(x)).ToList();
                epw.Month  = data[1].ConvertAll(x => System.Convert.ToInt32(x)).ToList();
                epw.Day    = data[2].ConvertAll(x => System.Convert.ToInt32(x)).ToList();
                epw.Hour   = data[3].ConvertAll(x => System.Convert.ToInt32(x) - 1).ToList();
                epw.Minute = data[4].ConvertAll(x => System.Convert.ToInt32(x) - 60).ToList();

                epw.UncertaintyFlag = data[5]; //A list of string

                epw.DryBulbTemperature                    = ConvertData(data, 6, "Dry Bulb Temperature");
                epw.DewPointTemperature                   = ConvertData(data, 7, "Dew Point Temperature");
                epw.RelativeHumidity                      = ConvertData(data, 8, "Relative Humidity");
                epw.AtmosphericStationPressure            = ConvertData(data, 9, "Atmospheric Station Pressure");
                epw.ExtraterrestrialHorizontalRadiation   = ConvertData(data, 10, "Extraterrestrial Horizontal Radiation");
                epw.ExtraterrestrialDirectNormalRadiation = ConvertData(data, 11, "Extraterrestrial Direct Normal Radiation");
                epw.HorizontalInfraredRadiationIntensity  = ConvertData(data, 12, "Horizontal Infrared Radiation Intensity");
                epw.GlobalHorizontalRadiation             = ConvertData(data, 13, "Global Horizontal Radiation");
                epw.DirectNormalRadiation                 = ConvertData(data, 14, "Direct Normal Radiation");
                epw.DiffuseHorizontalRadiation            = ConvertData(data, 15, "Diffuse Horizontal Radiation");
                epw.GlobalHorizontalIlluminance           = ConvertData(data, 16, "Global Horizontal Illuminance");
                epw.DirectNormalIlluminance               = ConvertData(data, 17, "Direct Normal Illuminance");
                epw.DiffuseHorizontalIlluminance          = ConvertData(data, 18, "Diffuse Horizontal Illuminance");
                epw.ZenithLuminance           = ConvertData(data, 19, "Zenith Luminance");
                epw.WindDirection             = ConvertData(data, 20, "Wind Direction");
                epw.WindSpeed                 = ConvertData(data, 21, "Wind Speed");
                epw.TotalSkyCover             = ConvertData(data, 22, "Total Sky Cover");
                epw.OpaqueSkyCover            = ConvertData(data, 23, "Opaque Sky Cover");
                epw.Visibility                = ConvertData(data, 24, "Visibility");
                epw.CeilingHeight             = ConvertData(data, 25, "Ceiling Height");
                epw.PresentWeatherObservation = ConvertData(data, 26, "Present Weather Observation");
                epw.PresentWeatherCodes       = ConvertData(data, 27, "Present Weather Codes");
                epw.PrecipitableWater         = ConvertData(data, 28, "Precipitable Water");
                epw.AerosolOpticalDepth       = ConvertData(data, 29, "Aerosol Optical Depth");
                epw.SnowDepth                 = ConvertData(data, 30, "Snow Depth");
                epw.DaysSinceLastSnowfall     = ConvertData(data, 31, "Days Since Last Snowfall");
                epw.Albedo = ConvertData(data, 32, "Albedo");
                epw.LiquidPrecipitationDepth    = ConvertData(data, 33, "Liquid Precipitation Depth");
                epw.LiquidPrecipitationQuantity = ConvertData(data, 34, "Liquid Precipitation Quantity");
            }
            catch (Exception e)
            {
                BH.Engine.Reflection.Compute.RecordError(e.ToString());
                return(null);
            }

            return(epw);
        }
示例#9
0
        public void GenerateWeatherFile50Years()
        {
            // name of old style validation xml file.
            // NB: This is a real YP validation XML file from 2004.
            string fileName = Path.Combine(filesDirectory, "TestValidation.xml");

            // Create a YieldProphet object from our YP xml file
            YieldProphet spec = YieldProphetUtility.YieldProphetFromFile(fileName);

            // Read in the rainfall data
            Utility.ApsimTextFile observedDataFile = new Utility.ApsimTextFile();
            observedDataFile.Open(Path.Combine(filesDirectory, "TestValidation.rain"));
            DataTable observedData = observedDataFile.ToTable();
            observedDataFile.Close();

            // Write the weather file.
            string rainFileName = Path.Combine(workingDirectory, spec.Paddock[0].Name) + ".met";
            WeatherFile weatherFiles = new WeatherFile();
            weatherFiles.CreateLongTerm(rainFileName, spec.Paddock[0].StationNumber,
                                        spec.Paddock[0].StartSeasonDate,
                                        spec.Paddock[0].StartSeasonDate.AddDays(300),
                                        new DateTime(2004, 6, 1),
                                        observedData, 50);

            Assert.AreEqual(weatherFiles.FilesCreated.Length, 50);

            Assert.AreEqual(Path.GetFileName(weatherFiles.FilesCreated[0]), "2004;A and R Weidemann;Wep 11954.met");
            Utility.ApsimTextFile weatherFile = new Utility.ApsimTextFile();
            weatherFile.Open(Path.Combine(workingDirectory, weatherFiles.FilesCreated[0]));
            DataTable weatherData = weatherFile.ToTable();
            weatherFile.Close();
            Assert.AreEqual(weatherData.Rows.Count, 301);
            Assert.AreEqual(weatherData.Rows[0]["codes"], "SSSO");
            Assert.AreEqual(weatherData.Rows[61]["codes"], "SSSO");
            Assert.AreEqual(weatherData.Rows[62]["codes"], "HHHH");
        }