59 WxObsMap::const_iterator i = obs.upper_bound(t);
71 if (wx.t > lastTime) lastTime=wx.t;
72 if (wx.t < firstTime) firstTime=wx.t;
75 bool WxObservation::isAllValid()
const
78 return temperatureSource != noWx
79 && pressureSource != noWx
80 && humiditySource != noWx;
88 WxObsMap::iterator i = obs.begin();
89 while (i != obs.end())
95 firstTime = i->second.t;
104 bool interpolate)
const
108 ObjectNotFound e(
"No WxObservation available near time " +
109 printTime(t,
"%02H:%02M:%02S on day %03j of %4Y"));
114 WxObsMap::const_iterator after = obs.upper_bound(t);
116 if (after == obs.begin())
119 if ((wxa.
t >= (t - iv)) && (wxa.
t <= (t + iv)))
126 ObjectNotFound e(
"No WxObservation available near time " +
127 printTime(t,
"%02H:%02M:%02S on day %03j of %4Y"));
134 WxObsMap::const_iterator before = after;
137 if (after == obs.end())
140 if((wxb.
t >= (t - iv)) && (wxb.
t <= (t + iv)))
147 ObjectNotFound e(
"No WeatherData available near time " +
148 printTime(t,
"%02H:%02M:%02S on day %03j of %4Y"));
159 if((wxb.
t >= (t - iv)) && (wxb.
t <= (t + iv)))
161 if ((wxa.
t >= (t - iv)) && (wxa.
t <= (t + iv)))
165 double dtw = wxa.
t - wxb.
t;
166 double dt = t - wxb.
t;
186 else if ((wxa.
t >= (t - iv)) && (wxa.
t <= (t + iv)))
193 ObjectNotFound e(
"No WeatherData available near time " +
194 printTime(t,
"%02H:%02M:%02S on day %03j of %4Y"));
200 if((wxb.
t >= (t - iv)) && (wxb.
t <= (t + iv)))
202 if ((wxa.
t >= (t - iv)) && (wxa.
t <= (t + iv)))
206 double diffa = wxa.
t - t;
207 double diffb = t - wxb.
t;
208 return(diffa < diffb ? wxa : wxb);
216 else if ((wxa.
t >= (t - iv)) && (wxa.
t <= (t + iv)))
223 ObjectNotFound e(
"No WeatherData available near time " +
224 printTime(t,
"%02H:%02M:%02S on day %03j of %4Y"));
236 s << obs.t <<
", t=" << obs.temperature
237 <<
", p=" << obs.pressure
238 <<
", rh=" << obs.humidity;