private static Channel DataRowToChannel(DataRow r) { int id = 0; if (!(r.IsNull("ch_id"))) { id = Convert.ToInt32(r["ch_id"]); } int stationId = Convert.ToInt32(r["st_id"]); int variableId = Convert.ToInt32(r["var_id"]); string stName = Convert.ToString(r["st_name"]); string stUrl = Convert.ToString(r["st_uri"]); long riverId = 0; if (!(r.IsNull("riv_id"))) { riverId = Convert.ToInt64(r["riv_id"]); } string op = Convert.ToString(r["operator_name"]); Channel ch = new Channel(id, stationId, variableId, TimeInterval.Missing); Station st = new Station(stationId, stName, stUrl, riverId, op); Variable v = VariableManager.GetItemById(variableId); ch.Station = st; ch.Variable = v; //also load river for hydrologic stations if (riverId > 0) { st.River = RiverManager.GetItemByStation(st.Id, true); } return ch; }
/// <summary> /// Returns a time series corresponding to the specific channel and interval /// the 'missing data' (periodList) is also internally loaded for all variables /// except stage and discharge. /// </summary> /// <param name="channel"></param> /// <param name="interval"></param> /// <returns></returns> public static ITimeSeries GetTimeSeries(Channel ch, TimeInterval interval) { VariableEnum v = ch.Variable.VarEnum; TimeStep step = GetDefaultTimeStep(v, interval); ITimeSeries ts; if (v == VariableEnum.Stage) { ts = new HydroTimeSeries(interval.Start, interval.End); TimeSeriesDS.LoadObservationsStage2(ch.StationId, interval.Start, interval.End, step, (IObservationList)ts); } else if (v == VariableEnum.Discharge) { ts = new HydroTimeSeries(interval.Start, interval.End); TimeSeriesDS.LoadObservationsDischarge2(ch.StationId, interval.Start, interval.End, step, (IObservationList)ts); } else if (v == VariableEnum.Temperature) { ts = new HydroTimeSeries(interval.Start, interval.End); //step = TimeStep.Hour; TimeSeriesDS.LoadObservationsTemperature2(ch.StationId, interval.Start, interval.End, step, (IObservationList)ts); } else if (v == VariableEnum.Snow) { ts = new HydroTimeSeries(interval.Start, interval.End); TimeSeriesDS.LoadObservationsSnow2(ch.StationId, interval.Start, interval.End, (IObservationList)ts); } else if (v == VariableEnum.PrecipHour || v == VariableEnum.Precip || v == VariableEnum.PrecipSum) { ts = new MyTimeSeries(interval.Start, interval.End, step); TimeSeriesDS.LoadObservationsPrecip2(ch.StationId, interval.Start, interval.End, step, (IObservationList)ts); } else { //snow ts = new HydroTimeSeries(interval.Start, interval.End); TimeSeriesDS.LoadObservationsSnow2(ch.StationId, interval.Start, interval.End, (IObservationList)ts); } return ts; }
private void SetupChart(ITimeSeries ts, Channel ch, GraphPane pane) { Station st = ch.Station; Variable var = ch.Variable; DateTime start = ts.Start; DateTime end = ts.End; DrawTitle(pane, var, st, start, end); SetupAxis(pane, var, start, end); SetupGrid(pane, var.VarEnum); SetupLegend(pane); }
/// <summary> /// Creates a chart - plots are made for all sensors in the time series /// </summary> /// <param name="ts">The time series of data to be ploted</param> /// <param name="ch">The channel (contains station, variable and copyright description) /// </param> /// <returns>The chart png image</returns> public Bitmap CreateChart(Channel ch, ITimeSeries ts) { GraphPane pane = SetupGraphPane(); SetupChart(ts, ch, pane); PlotChartForChannel(ts, ch, pane); return ExportGraph(pane); }
private void PlotChartForChannel(ITimeSeries ts, Channel ch, GraphPane pane) { VariableEnum varEnum = ch.Variable.VarEnum; if (ts.End < Convert.ToDateTime("2013-01-01") && ts.PercentAvailableData < 1.0) //no data.. { ShowNoDataTextBox(Resources.no_data, pane); ShowErrorTextBox(Resources.no_data_message, pane); } else { switch (varEnum) { case VariableEnum.Stage: PlotStageDischarge(ts, pane); break; case VariableEnum.Discharge: PlotStageDischarge(ts, pane); break; case VariableEnum.Snow: PlotSnow(ts, pane); break; case VariableEnum.SoilWater10: case VariableEnum.SoilWater50: PlotSoilWater(ts, pane); break; case VariableEnum.Precip: PlotPrecip(ts, pane); break; case VariableEnum.PrecipHour: PlotPrecipHour(ts, pane); break; case VariableEnum.Temperature: PlotTemperature(ts, pane); break; default: break; } //also plot 'no data' if necessary if (ch.Variable.VarEnum != VariableEnum.Stage && ch.Variable.VarEnum != VariableEnum.Discharge && ts.PercentAvailableData > 0.01) { //PlotMissingData(ts, pane); } //add 'copyright' notice ShowCopyrightTextBox("data: " + ch.Station.Operator, pane); } }