コード例 #1
0
 public static void ReadBinaryFile(string fileName, DateTime startTime, DateTime endTime, TimeStep timeStep, 
     bool includeNA, IObservationList observations)
 {
     if (timeStep == TimeStep.Day)
     {
         ReadBinaryFileDaily(fileName, startTime, endTime, includeNA, observations);
     }
     else
     {
         ReadBinaryFileHourly(fileName, startTime, endTime, includeNA, observations);
     }
 }
コード例 #2
0
ファイル: TimeSeriesDS.cs プロジェクト: jirikadlec2/hydrodata
        /// <summary>
        /// Retrieves a time series of discharge observations from the database
        /// (only measured, non-zero values are retrieved)
        /// </summary>
        /// <param name="stationId"></param>
        /// <param name="variableId"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="scaleFactor"></param>
        /// <param name="observations"></param>
        public static void LoadObservationsDischarge(int stationId, int variableId, DateTime start, DateTime end,
            TimeStep step, IObservationList observations)
        {
            //observations.Clear();
            SqlCommand cmd = DataUtils.CreateCommand();
            cmd.CommandText = "plaveninycz.new_query_observations";

            cmd.CommandType = CommandType.StoredProcedure;
            SetCmdParameters(cmd, stationId, variableId, start, end, step);
            SqlDataReader rdr;
            double val;
            DateTime t;

            try
            {
                cmd.Connection.Open();
                rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                while (rdr.Read())
                {
                    if (!rdr.IsDBNull(1))
                    {
                        t = Convert.ToDateTime(rdr[0]);
                        val = Convert.ToDouble(rdr[1]);
                        //val = Math.Pow(2.0, (val / 1000.0));
                        if (val > 0)
                        {
                            observations.AddObservation(t, val);
                        }
                        else
                        {
                            observations.AddUnknownValue(t);
                        }
                    }
                }
                rdr.Close();
            }
            finally
            {
                cmd.Connection.Close();
            }
        }
コード例 #3
0
        /// <summary>
        /// Loads the observations from the Text File
        /// </summary>
        /// <param name="stationId"></param>
        /// <param name="ch"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="observations"></param>
        /// <returns></returns>
        public int LoadObservationsFromFile(int stationId, Channel ch, DateTime start, DateTime end,
            IObservationList observations)
        {
            int channelId = ch.ChId;

            observations.Clear();

            List<Channel> oneChannel = new List<Channel> { ch };

            ChmiFile dta = new ChmiFile(stationId , oneChannel, LocalDataDir);
            List<Observation> rawData = dta.Read();

            foreach (Observation obs in rawData)
            {
                if (obs.Time >= start && obs.Time <= end)
                {
                    observations.AddObservation(obs.Time, obs.Value);
                }
            }

            return 0;
        }
コード例 #4
0
        /// <summary>
        /// Loads observations from database and adds
        /// the observations to the list.
        /// </summary>
        /// <param name="stationId"></param>
        /// <param name="channelId"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="observations"></param>
        /// <returns></returns>
        public int LoadObservations(int stationId, Channel ch, DateTime start, DateTime end,
           IObservationList observations)
        {
            DateTime curTime;
            double curValue;
            int channelId = ch.ChId;

            observations.Clear();

            //create a SQL command
            SqlCommand cmd;
            if (ch.ChType == "sra")
            {
                cmd = _dbHelper.CreateCommand("qry_precip");
            }
            else
            {
                cmd = _dbHelper.CreateCommand("qry_data");
            }
            cmd.Parameters.Add(new SqlParameter("@st_id", SqlDbType.SmallInt));
            cmd.Parameters.Add(new SqlParameter("@ch_id", SqlDbType.TinyInt));
            cmd.Parameters.Add(new SqlParameter("@t1", SqlDbType.SmallDateTime));
            cmd.Parameters.Add(new SqlParameter("@t2", SqlDbType.SmallDateTime));

            cmd.Parameters["@st_id"].Value = stationId;
            cmd.Parameters["@ch_id"].Value = channelId;
            cmd.Parameters["@t1"].Value = start;
            cmd.Parameters["@t2"].Value = end;

            try
            {
                cmd.Connection.Open();
                SqlDataReader r = cmd.ExecuteReader();
                while (r.Read())
                {
                    curTime = Convert.ToDateTime(r["time"]);
                    curValue = Convert.ToDouble(r["value"]);
                    observations.AddObservation(curTime, curValue);
                }
            }
            finally
            {
                cmd.Connection.Close();
            }

            return 0;
        }
コード例 #5
0
ファイル: TimeSeriesDS.cs プロジェクト: jirikadlec2/hydrodata
        public static void LoadObservationsTemperature2(int stationID, DateTime startTime, DateTime endTime,
            TimeStep step, IObservationList observations)
        {
            //the base directory where files are stored
            string baseDir = @"C:\temp\data";

            //the czech variable name
            string varName = "teplota";

            //find the file name to read the data from
            string stepName = (step == TimeStep.Hour) ? "h" : "d";

            string stationCode = stationID.ToString("D4");

            string file = string.Format(@"{0}\{1}\{0}_{1}_{2}.dat", stepName, varName, stationCode);
            string fileName = Path.Combine(baseDir, file);

            BinaryFileHelper.ReadBinaryFile(fileName, startTime, endTime, step, true, observations);
        }
コード例 #6
0
        public static void ReadBinaryFileDaily(string fileName, DateTime startTime, DateTime endTime, 
            bool includeNA, IObservationList observations)
        {
            int SIZEOF_FLOAT = 4;
            int SIZEOF_LONG = 8;

            //clear out any existing obs.
            observations.Clear();
            try
            {
                using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
                {
                    //read the startDate
                    byte[] startDateBytes = new byte[SIZEOF_LONG];
                    stream.Read(startDateBytes, 0, startDateBytes.Length);
                    long[] startDateBinary = new long[1];
                    Buffer.BlockCopy(startDateBytes, 0, startDateBinary, 0, SIZEOF_LONG);
                    DateTime startDateFromFile = DateTime.FromBinary(startDateBinary[0]);

                    //check start time
                    if (startTime < startDateFromFile)
                    {
                        startTime = startDateFromFile;
                    }

                    //find position of query start time
                    int startTimePositionDays = (int)((startTime - startDateFromFile).TotalDays);
                    if (startTimePositionDays < 0)
                        return;
                    int numDaysInFile = (int)((stream.Length - SIZEOF_LONG) / SIZEOF_FLOAT);
                    DateTime endDateFromFile = startDateFromFile.AddDays(numDaysInFile);

                    if (endTime < startDateFromFile)
                        return;
                    if (startTime > endDateFromFile)
                        return;

                    long startTimePositionInBytes = SIZEOF_LONG + startTimePositionDays * SIZEOF_FLOAT;
                    int numDaysStartEnd = (int)((endTime - startTime).TotalDays);
                    long numBytesStartEnd = numDaysStartEnd * SIZEOF_FLOAT;
                    if (startTimePositionInBytes + numBytesStartEnd > stream.Length)
                    {
                        numBytesStartEnd = stream.Length - startTimePositionInBytes;
                        numDaysStartEnd = (int)(numBytesStartEnd / SIZEOF_FLOAT);
                    }
                    long endTimePositionInBytes = startTimePositionInBytes + numBytesStartEnd;

                    byte[] resultBytes = new byte[numBytesStartEnd];

                    stream.Seek(startTimePositionInBytes, SeekOrigin.Begin);
                    stream.Read(resultBytes, 0, resultBytes.Length);

                    float[] result = new float[numDaysStartEnd];
                    Buffer.BlockCopy(resultBytes, 0, result, 0, resultBytes.Length);

                    DateTime curTime = startTime;
                    for (int i = 0; i < result.Length; i++)
                    {
                        if (result[i] == -9999.0)
                        {
                            if (includeNA)
                            {
                                observations.AddUnknownValue(curTime);
                            }
                        }
                        else
                        {
                            observations.AddObservation(curTime, result[i]);
                        }
                        curTime = curTime.AddDays(1);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }