Example #1
0
        public void TestUsgsQualificationCodes()
        {
            UsgsDailyValueSeries s = new UsgsDailyValueSeries("13168500", UsgsDailyParameter.DailyMeanTemperature);

            var t1 = new DateTime(1997, 8, 1);
            var t2 = new DateTime(1997, 8, 15);

            s.Read(t1, t2);
            s.RemoveMissing();
            Assert.AreEqual(23.5, s[0].Value);
            Assert.AreEqual("A", s[0].Flag);
            s.WriteToConsole(true);

            /*
             * USGS	13168500	1997-08-02	177	A	26.6	A	21.1	A	23.5	A
             * USGS	13168500	1997-08-03	163	A	27.5	A	20.8	A	23.9	A
             * USGS	13168500	1997-08-04	153	A	25.7	A	22.8	A	23.9	A
             * USGS	13168500	1997-08-05	144	A	27.5	A	21.6	A	24.2	A
             * USGS	13168500	1997-08-06	149	A	28.2	A	21.9	A	24.7	A
             * USGS	13168500	1997-08-07	140	A	27.5	A	22.4	A	25.0	A
             * USGS	13168500	1997-08-08	135	A	26.9	A	22.3	A	24.4	A
             * USGS	13168500	1997-08-09	131	A	26.0	A	20.9	A	23.2	A
             * USGS	13168500	1997-08-10	130	A	27.1	A	21.6	A	23.9	A
             *
             */
        }
Example #2
0
        public void TestDaily()
        {
            UsgsDailyValueSeries s = new UsgsDailyValueSeries("13190500", UsgsDailyParameter.DailyMeanDischarge);

            s.Read(new DateTime(2003, 10, 1), DateTime.Now);
            s.WriteCsv(@"C:\temp\andi_qd_usgs.csv");
        }
        public void ManageSeriesCatalogDirectly()
        {
            Logger.EnableLogger();

            var filename = @"c:\temp\test.pdb";

            if (File.Exists(filename))
            {
                File.Delete(filename);
            }

            Console.WriteLine(filename);
            var server = new SQLiteServer(filename);
            var db     = new TimeSeriesDatabase(server, false);

            var seriesCatalog = db.GetSeriesCatalog();
            var siteCatalog   = db.GetSiteCatalog();

            // create a folder for each month
            for (int i = 1; i <= 12; i++)
            {
                var t = new DateTime(2015, i, 1);
                seriesCatalog.GetOrCreateFolder("Months", t.ToString("MMMM"));
            }

            // Add USGS series (Boise River) to the January Folder
            Series s = new UsgsDailyValueSeries("13206000", UsgsDailyParameter.DailyMeanDischarge);

            s.SiteID = "usgs_13206000";
            var januaryIndex = seriesCatalog.GetOrCreateFolder("Months", "January");

            seriesCatalog.AddSeriesCatalogRow(s, seriesCatalog.NextID(), januaryIndex, "usgs_boiseriver_flow");

            // Add Hydromet series to the February Folder
            s        = new HydrometDailySeries("bhr", "af", HydrometHost.GreatPlains);
            s.Name   = "gphyd_bhr_af";
            s.SiteID = "gphyd_bhr";
            var feb = seriesCatalog.GetOrCreateFolder("Months", "February");

            seriesCatalog.AddSeriesCatalogRow(s, seriesCatalog.NextID(), feb, "usgs_boiseriver_flow");


            // Add Site information

            siteCatalog.AddsitecatalogRow("usgs_13206000", "BOISE RIVER AT GLENWOOD BRIDGE NR BOISE ID", "ID");
            siteCatalog.AddsitecatalogRow("gphyd_bhr", "Big Horn Reservoir", "MT");

            server.SaveTable(seriesCatalog);


            s = db.GetSeriesFromName("gphyd_bhr_af");
            s.Read();
            Console.WriteLine(s.Count);

            // Add CSV file


            db.Inventory();
        }
Example #4
0
        public void AddSeriesDirectly()
        {
            Logger.EnableLogger();

            var filename = FileUtility.GetTempFileNameInDirectory(@"c:\temp\", ".pdb");

            if (File.Exists(filename))
            {
                File.Delete(filename);
            }

            Console.WriteLine(filename);
            var server = new SQLiteServer(filename);
            var db     = new TimeSeriesDatabase(server);

            // create a folder for each month
            for (int i = 1; i <= 12; i++)
            {
                var t = new DateTime(2015, i, 1);
                db.AddFolder("Months", t.ToString("MMMM"));
            }

            // Add USGS series (Boise River) to the January Folder
            Series s = new UsgsDailyValueSeries("13206000", UsgsDailyParameter.DailyMeanDischarge);

            s.SiteID = "13206000";
            var folder = db.GetOrCreateFolder("Months", "January");

            s.Read(DateTime.Parse("2015-01-01"), DateTime.Parse("2015-01-10"));
            db.AddSeries(s, folder);
            // Add Hydromet series to the February Folder
            s        = new HydrometDailySeries("bhr", "af", HydrometHost.GreatPlains);
            s.Name   = "gphyd_bhr_af";
            s.SiteID = "gphyd_bhr";
            var feb = db.GetOrCreateFolder("Months", "February");

            db.AddSeries(s, feb);


            // Add Csv file data to March Folder.
            s = new TextSeries(@"c:\temp\test_river.csv");
            s.Read();// read data.  Use Read(t1,t2) to limit by dates
            s.SiteID          = "test";
            s.Units           = "cfs";
            s.Table.TableName = "test_river"; // table name needs to be unique
            db.AddSeries(s, db.GetOrCreateFolder("Months", "March"));

            s = db.GetSeriesFromName("gphyd_bhr_af");
            s.Read();
            Console.WriteLine(s.Count);

            // Add CSV file


            db.Inventory();
        }
Example #5
0
        /// <summary>
        /// reads USGS instant streamflow data and saves in Hydromet format
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("Usage: ImportUsgs site_list.csv hoursBack");
                return;
            }

            int hoursBack = Convert.ToInt32(args[1]);

            Point.MissingValueFlag = 998877;
            bool errors = false;

            CsvFile csv = new CsvFile(args[0], CsvFile.FieldTypes.AllText);

            foreach (DataRow row in csv.Rows)
            {
                var    interval       = GetInterval(row);
                string site_id        = row["site_id"].ToString();
                string usgs_parameter = row["usgs_parameter"].ToString();
                string pcode          = row["pcode"].ToString();
                string cbtt           = row["cbtt"].ToString();
                Series s;

                Console.WriteLine(cbtt);
                if (interval == TimeInterval.Daily)
                {
                    if (usgs_parameter.ToLower() == "gageheight")
                    {
                        s = new UsgsDailyValueSeries(site_id, UsgsDailyParameter.DailyMeanDischarge);
                    }
                    else
                    {
                        Logger.WriteLine("Error: the parameter '" + usgs_parameter + "' is not yet supported");
                        s = new Series();
                    }
                    s.Read(DateTime.Now.AddHours(-hoursBack), DateTime.Now);

                    TimeSeriesTransfer.Import(s, cbtt, pcode, "usgs");
                }
                else if (interval == TimeInterval.Irregular)
                {
                    if (usgs_parameter.ToLower() == "watertemp")
                    {
                        s = new UsgsRealTimeSeries(site_id, UsgsRealTimeParameter.Temperature);
                    }
                    else
                    if (usgs_parameter.ToLower() == "gageheight")
                    {
                        s = new UsgsRealTimeSeries(site_id, UsgsRealTimeParameter.GageHeight);
                    }
                    else if (usgs_parameter.ToLower() == "discharge")
                    {
                        s = new UsgsRealTimeSeries(site_id, UsgsRealTimeParameter.Discharge);
                    }
                    else
                    {
                        Logger.WriteLine("Error: the parameter '" + usgs_parameter + "' is not yet supported");
                        s = new Series();
                    }

                    try
                    {
                        s.Read(DateTime.Now.AddHours(-hoursBack), DateTime.Now);

                        if (usgs_parameter.ToLower() == "watertemp" && pcode.ToLower() == "wf")
                        {
                            //(°C × 9/5) + 32 = °F
                            s = s * 9.0 / 5.0 + 32.0;
                        }

                        s.RemoveMissing();
                        if (s.Count > 0)
                        {
                            TimeSeriesTransfer.Import(s, cbtt, pcode, "usgs");
                        }
                    }
                    catch (Exception e)
                    {
                        errors = true;
                        Console.WriteLine(e.Message);
                    }
                }
            }



            if (errors)
            {
                throw new Exception("Error reading one or more sites");
            }
        }
Example #6
0
        /// <summary>
        /// reads USGS instant streamflow data and saves in Hydromet format
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("Usage: ImportUsgs site_list.csv hoursBack");
                return;
            }

            int hoursBack = Convert.ToInt32(args[1]);

            Point.MissingValueFlag = 998877;
            bool errors = false;

            CsvFile csv = new CsvFile(args[0], CsvFile.FieldTypes.AllText);
            foreach (DataRow row in csv.Rows)
            {
                var interval = GetInterval(row);
                string site_id = row["site_id"].ToString();
                string usgs_parameter = row["usgs_parameter"].ToString();
                string pcode = row["pcode"].ToString();
                string cbtt = row["cbtt"].ToString();
                Series s;

                Console.WriteLine(cbtt);
                if (interval == TimeInterval.Daily)
                {
                    if (usgs_parameter.ToLower() == "gageheight")
                        s = new UsgsDailyValueSeries(site_id, UsgsDailyParameter.DailyMeanDischarge);
                    else
                    {
                        Logger.WriteLine("Error: the parameter '"+usgs_parameter+"' is not yet supported");
                        s = new Series();
                    }
                    s.Read(DateTime.Now.AddHours(-hoursBack), DateTime.Now);
                    TimeSeriesRouting.RouteDaily(s, cbtt, pcode, RouteOptions.Outgoing);
                }
                else if( interval == TimeInterval.Irregular)
                {
                    if (usgs_parameter.ToLower() == "watertemp")
                        s = new UsgsRealTimeSeries(site_id, UsgsRealTimeParameter.Temperature);
                    else
                    if (usgs_parameter.ToLower() == "gageheight")
                        s = new UsgsRealTimeSeries(site_id, UsgsRealTimeParameter.GageHeight);
                    else if (usgs_parameter.ToLower() == "discharge")
                        s = new UsgsRealTimeSeries(site_id, UsgsRealTimeParameter.Discharge);
                    else
                    {
                        Logger.WriteLine("Error: the parameter '" + usgs_parameter + "' is not yet supported");
                        s = new Series();
                    }

                    try
                    {
                        s.Read(DateTime.Now.AddHours(-hoursBack), DateTime.Now);

                        if (usgs_parameter.ToLower() == "watertemp" && pcode.ToLower() == "wf")
                        {
                            //(°C × 9/5) + 32 = °F
                            s = s * 9.0 / 5.0 + 32.0;
                        }

                        s.RemoveMissing();
                        if( s.Count >0)
                        TimeSeriesRouting.RouteInstant(s, cbtt, pcode, RouteOptions.Outgoing);
                    }
                    catch(Exception e)
                    {
                        errors = true;
                        Console.WriteLine(e.Message);
                    }
                }
            }

            if (errors)
                throw new Exception("Error reading one or more sites");
        }