27 #include "../../../datatype/DateTime.h"
28 #include "../../../datatype/DateTimePeriod.h"
29 #include "../../../datatype/DateTimeInstant.h"
30 #include "../../../datatype/DateTimeUtils.h"
31 #include "../../../datatype/SimpleData.h"
32 #include "../../../datatype/AbstractData.h"
33 #include "../../../geometry/Geometry.h"
38 #include "../interpolator/AbstractTimeSeriesInterp.h"
39 #include "../interpolator/NearestValueAtTimeInterp.h"
59 m_interpolator(interp),
68 m_interpolator(interp),
76 : m_observations(obs),
77 m_interpolator(interp),
86 m_interpolator(interp),
91 while(it!=patch.
end())
99 : m_observations(ts.m_observations),
100 m_interpolator(ts.m_interpolator),
101 m_location(static_cast<te::gm::Geometry*>(ts.m_location->clone())),
112 m_location.reset(static_cast<te::gm::Geometry*>(other.
m_location->clone()));
120 TimeSeries* result =
new TimeSeries(m_interpolator, m_id, static_cast<te::gm::Geometry*>(m_location->clone()));
121 TimeSeriesObservationSet::const_iterator it = m_observations.begin();
122 TimeSeriesObservationSet::const_iterator ite = m_observations.end();
135 return m_observations;
140 return m_interpolator;
145 m_interpolator = interp;
160 return m_location.get();
165 m_location.reset(geom);
171 m_observations.insert(item);
178 m_observations.insert(item);
185 m_observations.insert(item);
192 m_observations.insert(item);
197 m_observations.insert(item);
202 return m_observations.size();
207 TimeSeriesObservationSet::const_iterator it = m_observations.begin();
213 TimeSeriesObservationSet::const_iterator it = m_observations.end();
220 TimeSeriesObservationSet::const_iterator it = m_observations.find(item);
227 TimeSeriesObservationSet::const_iterator it = m_observations.find(item);
228 TimeSeriesObservationSet::const_iterator ite = m_observations.end();
230 return std::auto_ptr<te::dt::AbstractData>(it->getValue()->clone());
231 return std::auto_ptr<te::dt::AbstractData>(m_interpolator->estimate(*
this,t));
236 std::auto_ptr<te::dt::AbstractData> v(getValue(t));
237 return atof(v->toString().c_str());
242 std::auto_ptr<te::dt::AbstractData> v(getValue(t));
243 return atoi(v->toString().c_str());
248 std::auto_ptr<te::dt::AbstractData> v(getValue(t));
249 return v->toString();
254 TimeSeriesObservationSet::iterator it1 = m_observations.begin();
255 TimeSeriesObservationSet::reverse_iterator it2 = m_observations.rbegin();
265 minValue = m_observations.get<1>().begin()->getDouble();
266 minValue = m_observations.get<1>().rbegin()->getDouble();
272 minValue = m_observations.get<1>().begin()->getInt();
273 minValue = m_observations.get<1>().rbegin()->getInt();
278 minValue = m_observations.get<2>().begin()->getString();
279 minValue = m_observations.get<2>().rbegin()->getString();
286 TimeSeriesObservationSet::const_iterator itb = m_observations.
end();
287 TimeSeriesObservationSet::const_iterator ite = m_observations.end();
292 itb = m_observations.upper_bound(item);
298 itb = m_observations.find(item);
299 if(itb==m_observations.end())
300 itb = m_observations.upper_bound(item);
306 itb = m_observations.begin();
307 ite = m_observations.find(item);
308 if(ite==m_observations.end())
309 ite = m_observations.upper_bound(item);
315 itb = m_observations.begin();
316 ite = m_observations.upper_bound(item);
321 std::auto_ptr<te::dt::DateTimePeriod> period(static_cast<te::dt::DateTimePeriod*>(dt.
clone()));
324 itb = m_observations.find(item1);
325 if(itb==m_observations.end())
326 itb = m_observations.upper_bound(item1);
327 ite = m_observations.upper_bound(item2);
333 std::pair<TimeSeriesObservationSet::const_iterator, TimeSeriesObservationSet::const_iterator> itPair;
334 itPair = m_observations.equal_range(item);
337 if(ite!= m_observations.end())
346 std::vector<TimeSeriesPatch>& result)
const
349 std::map<te::dt::DateTime*, te::dt::AbstractData*, te::dt::CompareDateTime> resultTS;
350 getResultOrderedByTime(v, r, resultTS);
354 std::map<te::dt::DateTime*, te::dt::AbstractData*,
358 TimeSeriesObservationSet::const_iterator itOriginBegin = m_observations.find(item);
359 TimeSeriesObservationSet::const_iterator itOriginEnd = m_observations.end();
361 TimeSeriesObservationSet::const_iterator patchBegin;
362 TimeSeriesObservationSet::const_iterator patchEnd;
364 while(itResultBegin!=itResultEnd && itOriginBegin!=itOriginEnd)
366 patchBegin = itOriginBegin;
369 while( (itResultBegin!=itResultEnd) && (itOriginBegin!=itOriginEnd) &&
370 (itResultBegin->first == itOriginBegin->getTime()))
372 patchEnd = itOriginBegin;
379 if(patchEnd!=itOriginEnd)
385 if(itResultBegin!=itResultEnd)
387 item.
setTime(static_cast<te::dt::DateTime*>(itResultBegin->first->clone()));
388 itOriginBegin = m_observations.find(item);
397 std::vector<TimeSeriesPatch>& result)
const
401 std::vector<TimeSeriesPatch> patches;
404 std::vector<TimeSeriesPatch>::const_iterator it = patches.begin();
405 TimeSeriesObservationSet::const_iterator ite = m_observations.end();
407 while(it!=patches.end())
416 if(itAuxBegin!=ts.
end())
423 if(itAuxEnd==ts.
end())
444 std::map<te::dt::DateTime*, te::dt::AbstractData*, te::dt::CompareDateTime>& result)
const
446 TimeSeriesByValue::const_iterator itResultBeg = m_observations.get<1>().end();
447 TimeSeriesByValue::const_iterator itResultEnd = m_observations.get<1>().end();
451 itResultBeg = m_observations.get<1>().begin();
452 itResultEnd = m_observations.get<1>().find(v);
453 if(itResultEnd==m_observations.get<1>().end())
454 itResultEnd = m_observations.get<1>().upper_bound(v);
458 itResultBeg = m_observations.get<1>().upper_bound(v);
462 std::pair<TimeSeriesByValue::const_iterator, TimeSeriesByValue::const_iterator> itPair;
463 itPair = m_observations.get<1>().equal_range(v);
464 itResultBeg = itPair.first;
465 itResultEnd = itPair.second;
466 if(itResultEnd!= m_observations.get<1>().end())
471 itResultBeg = m_observations.get<1>().begin();
472 itResultEnd = m_observations.get<1>().upper_bound(v);
476 itResultBeg = m_observations.get<1>().find(v);
477 if(itResultBeg==m_observations.get<1>().end())
478 itResultBeg = m_observations.get<1>().upper_bound(v);
482 while(itResultBeg!=itResultEnd)
484 result.insert(std::pair<te::dt::DateTime*,te::dt::AbstractData*>(itResultBeg->getTime(), itResultBeg->getValue()));
TimeSeriesIterator at(te::dt::DateTime *t) const
It returns an iterator that points to an observation at a given time.
boost::multi_index_container< TimeSeriesObservation, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::identity< TimeSeriesObservation > >, boost::multi_index::ordered_non_unique< boost::multi_index::const_mem_fun< TimeSeriesObservation, double,&TimeSeriesObservation::getDouble > >, boost::multi_index::ordered_non_unique< boost::multi_index::const_mem_fun< TimeSeriesObservation, std::string,&TimeSeriesObservation::getString > > > > TimeSeriesObservationSet
TimeSeriesPatch getPatch(const te::dt::DateTime &dt, te::dt::TemporalRelation r=te::dt::DURING) const
It returns a time series subset that satisfies a given temporal relation.
TEDATATYPEEXPORT DateTimePeriod * GetTemporalExtent(const DateTime *t1, const DateTime *t2)
It returns the temporal extent of two date and time types.
std::string m_id
The time series identification.
void setLocation(te::gm::Geometry *geom)
It sets the time series location.
virtual AbstractData * clone() const =0
It returns a clone of this object.
BasicRelation
Relations between simple attribute values.
std::auto_ptr< te::dt::AbstractData > getValue(te::dt::DateTime *t) const
It returns the value associated to a given date and time.
void setInterpolator(AbstractTimeSeriesInterp *interp)
It sets the interpolator associated to the time series.
std::auto_ptr< te::gm::Geometry > m_location
The time series location.
A template for atomic data types (integers, floats, strings and others).
virtual ~TimeSeries()
It returns time series subsets that satisfy the given relations.
A class to traverse the observations of a TimeSeries.
int getInt(te::dt::DateTime *t) const
It returns the value as an integer associated to a given date and time.
void add(te::dt::DateTime *time, te::dt::AbstractData *value)
It adds an observation (time and attribute value) into the time series.
TimeSeriesIterator end() const
TimeSeriesIterator end() const
It returns an iterator that points to the end of the time series.
void getPatches(const double &v, te::dt::BasicRelation r, std::vector< TimeSeriesPatch > &result) const
It returns time series subsets that satisfy a given relation.
double getDouble(te::dt::DateTime *t) const
It returns the value as a double associated to a given date and time.
TimeSeries()
Empty constructor.
This file contains a class to represent a time series observation.
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
SimpleData< std::string, STRING_TYPE > String
AbstractTimeSeriesInterp * m_interpolator
The interpolator used to estimate values at non-observed times.
TimeSeries & operator=(const TimeSeries &other)
Copy assignment operator.
TemporalRelation
Temporal relations between date and time (Source: Allen, 1991).
te::gm::Geometry * getLocation() const
It returns the time series location.
A struct to represent a patch or a continuous piece of a time series.
void getValueExtent(double &minValue, double &maxValue)
It returns the minimal and maximun values of the time series.
It is an interpolation function the estimates the nearest value at a given non-observed time of a tim...
An abstract class for an interpolation function or interpolator that estimate a value at non-observav...
TimeSeriesIterator begin() const
const TimeSeriesObservationSet & getObservations() const
It returns the time series observations.
void getResultOrderedByTime(const double &v, te::dt::BasicRelation r, std::map< te::dt::DateTime *, te::dt::AbstractData *, te::dt::CompareDateTime > &result) const
It returns the result of a basic relation ordered by time.
An auxiliary struct to compare two datetime pointers.
A class to represent time series.
void setTime(te::dt::DateTime *t)
It sets the date time.
A base class for values that can be retrieved from the data access module.
AbstractTimeSeriesInterp * getInterpolator() const
It returns the interpolator associated to the time series.
SimpleData< boost::int32_t, INT32_TYPE > Int32
void setId(const std::string &id)
It sets the time series identifier.
SimpleData< double, DOUBLE_TYPE > Double
std::size_t size() const
It returns the size of the time series observation set.
std::auto_ptr< te::dt::DateTimePeriod > getTemporalExtent() const
It returns the temporal extent or range of the time series.
TimeSeriesObservationSet m_observations
The time series observations.
te::dt::DateTime * getTime() const
It returns the datetime pointed by the internal cursor.
This file contains a class to represent a time series.
std::string getString(te::dt::DateTime *t) const
It returns the value as a string associated to a given date and time.
TimeSeries * clone() const
It returns a clone of this time series.
A class to represent an observation (time and value) of a time series.
std::string getId() const
It returns the time series identifier.
TimeSeriesIterator begin() const
It returns an iterator that points to the first observation of the time series.