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); } }
/// <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(); } }
/// <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; }
/// <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; }
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); }
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); } }