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()));
This file contains a class to represent a time series observation.
SimpleData< std::string, STRING_TYPE > String
TimeSeries & operator=(const TimeSeries &other)
Copy assignment operator.
TimeSeries * clone() const
It returns a clone of this time series.
void setInterpolator(AbstractTimeSeriesInterp *interp)
It sets the interpolator associated to the time series.
std::string getId() const
It returns the time series identifier.
BasicRelation
Relations between simple attribute values.
TimeSeriesIterator at(te::dt::DateTime *t) const
It returns an iterator that points to an observation at a given time.
A class to traverse the observations of a TimeSeries.
double getDouble(te::dt::DateTime *t) const
It returns the value as a double associated to a given date and time.
TimeSeriesIterator end() const
std::auto_ptr< te::dt::DateTimePeriod > getTemporalExtent() const
It returns the temporal extent or range of the time series.
virtual ~TimeSeries()
It returns time series subsets that satisfy the given relations.
std::size_t size() const
It returns the size of the time series observation set.
SimpleData< boost::int32_t, INT32_TYPE > Int32
TemporalRelation
Temporal relations between date and time (Source: Allen, 1991).
te::dt::DateTime * getTime() const
It returns the datetime pointed by the internal cursor.
An auxiliary struct to compare two datetime pointers.
void getValueExtent(double &minValue, double &maxValue)
It returns the minimal and maximun values of the time series.
This file contains a class to represent a time series.
A class to represent an observation (time and value) of 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.
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.
std::auto_ptr< te::dt::AbstractData > getValue(te::dt::DateTime *t) const
It returns the value associated to a given date and time.
TimeSeriesIterator begin() const
AbstractTimeSeriesInterp * m_interpolator
The interpolator used to estimate values at non-observed times.
A base class for values that can be retrieved from the data access module.
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.
TimeSeries()
Empty constructor.
const TimeSeriesObservationSet & getObservations() const
It returns the time series observations.
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.
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
void setTime(te::dt::DateTime *t)
It sets the date time.
TimeSeriesObservationSet m_observations
The time series observations.
An abstract class for an interpolation function or interpolator that estimate a value at non-observav...
void setLocation(te::gm::Geometry *geom)
It sets the time series location.
A class to represent time series.
SimpleData< double, DOUBLE_TYPE > Double
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.
std::string m_id
The time series identification.
void setId(const std::string &id)
It sets the time series identifier.
TEDATATYPEEXPORT DateTimePeriod * GetTemporalExtent(const DateTime *t1, const DateTime *t2)
It returns the temporal extent of two date and time types.
A template for atomic data types (integers, floats, strings and others).
std::auto_ptr< te::gm::Geometry > m_location
The time series location.
void getPatches(const double &v, te::dt::BasicRelation r, std::vector< TimeSeriesPatch > &result) const
It returns time series subsets that satisfy a given relation.
virtual AbstractData * clone() const =0
It returns a clone of this object.
AbstractTimeSeriesInterp * getInterpolator() const
It returns the interpolator associated to the time series.
TimeSeriesIterator end() const
It returns an iterator that points to the end of the time series.
TimeSeriesIterator begin() const
It returns an iterator that points to the first observation of the time series.
It is an interpolation function the estimates the nearest value at a given non-observed time of a tim...
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