27 #include "../../../datatype/DateTime.h" 
   28 #include "../../../datatype/DateTimePeriod.h" 
   29 #include "../../../datatype/DateTimeInstant.h" 
   30 #include "../../../datatype/DateTimeUtils.h" 
   31 #include "../../../geometry/Geometry.h" 
   32 #include "../../../geometry/Utils.h" 
   33 #include "../../../sam/rtree/Index.h" 
   37 #include "../timeseries/TimeSeries.h" 
   38 #include "../interpolator/AbstractTrajectoryInterp.h" 
   39 #include "../interpolator/NearestGeometryAtTimeInterp.h" 
   66     m_interpolator(interp),
 
   75   : m_observations(obs),
 
   85                                 const std::string& 
id)
 
   86   : m_observations(obs),
 
   87     m_interpolator(interp),
 
   96                     const std::string& 
id)
 
   98     m_interpolator(interp),
 
  106   while(it!=patch.
end())
 
  115   : m_observations(ph.m_observations),
 
  116     m_interpolator(ph.m_interpolator),
 
  137   TrajectoryObservationSet::const_iterator it = m_observations.begin();
 
  138   while(it != m_observations.end())
 
  150   return m_observations;
 
  155   return m_interpolator;
 
  160   m_interpolator = interp;
 
  178   std::pair<te::dt::DateTimeShrPtr, te::gm::GeometryShrPtr> pr(t,g);
 
  184   m_observations.insert(p);
 
  186   m_rtree->insert(*env, p.first.get());
 
  191   return m_observations.size();
 
  196   TrajectoryObservationSet::const_iterator it = m_observations.begin();
 
  202   TrajectoryObservationSet::const_iterator it = m_observations.end();
 
  209   TrajectoryObservationSet::const_iterator it = m_observations.find(aux);
 
  216   TrajectoryObservationSet::const_iterator it = m_observations.find(aux);
 
  217   if(it!=m_observations.end())
 
  218     return std::auto_ptr<te::gm::Geometry>(static_cast<te::gm::Geometry*>(it->second->clone()));
 
  220   return std::auto_ptr<te::gm::Geometry>(m_interpolator->estimate(*
this,t)); 
 
  233   return m_rtree->getMBR();
 
  241   TrajectoryObservationSet::const_iterator itb = m_observations.
end();
 
  242   TrajectoryObservationSet::const_iterator ite = m_observations.end();
 
  248     itb = m_observations.upper_bound(shrdt);
 
  253     itb = m_observations.find(shrdt);
 
  254     if(itb==m_observations.end())
 
  255       itb = m_observations.upper_bound(shrdt);
 
  260     itb = m_observations.begin();
 
  261     ite = m_observations.find(shrdt);
 
  262     if(ite==m_observations.end())
 
  263       ite = m_observations.upper_bound(shrdt);
 
  268     itb = m_observations.begin();
 
  269     ite = m_observations.upper_bound(shrdt); 
 
  276     itb = m_observations.find(t1);
 
  277     if(itb==m_observations.end())
 
  278       itb = m_observations.upper_bound(t1);
 
  279     ite = m_observations.upper_bound(t2); 
 
  284     std::pair<TrajectoryObservationSet::const_iterator, TrajectoryObservationSet::const_iterator> itPair;
 
  285     itPair = m_observations.equal_range(shrdt);
 
  288     if(ite!= m_observations.end())
 
  298                                   std::vector<TrajectoryPatch>& result)
 const 
  305   std::vector<te::dt::DateTime*> report;
 
  306   m_rtree->search(g, report);
 
  309   std::vector<te::dt::DateTime*>::const_iterator itResultBegin = report.begin();
 
  310   std::vector<te::dt::DateTime*>::const_iterator itResultEnd = report.end();
 
  313   TrajectoryObservationSet::const_iterator itOriginBegin = m_observations.find(shrdt);
 
  314   TrajectoryObservationSet::const_iterator itOriginEnd = m_observations.end();
 
  316   TrajectoryObservationSet::const_iterator pathBegin;
 
  317   TrajectoryObservationSet::const_iterator pathEnd;
 
  319   while(itResultBegin!=itResultEnd && itOriginBegin!=itOriginEnd)
 
  321      pathBegin = itOriginBegin; 
 
  324      while( (itResultBegin!=itResultEnd) && (itOriginBegin!=itOriginEnd) && 
 
  325             (*itResultBegin == itOriginBegin->first.get())) 
 
  327         pathEnd = itOriginBegin;
 
  334      if(pathEnd!=itOriginEnd)
 
  340      if(itResultBegin!=itResultEnd)
 
  342        shrdt.reset(static_cast<te::dt::DateTime*>((*itResultBegin)->clone()));
 
  343        itOriginBegin = m_observations.find(shrdt);
 
  352                                   std::vector<TrajectoryPatch>& result)
 const 
  358   std::vector<te::dt::DateTime*> report;
 
  359   m_rtree->search(*geom.
getMBR(), report);
 
  363   std::vector<te::dt::DateTime*>::const_iterator itResultBegin = report.begin();
 
  364   std::vector<te::dt::DateTime*>::const_iterator itResultEnd = report.end();
 
  367   TrajectoryObservationSet::const_iterator itOriginBegin = m_observations.find(shrdt);
 
  368   TrajectoryObservationSet::const_iterator itOriginEnd = m_observations.end();
 
  370   TrajectoryObservationSet::const_iterator pathBegin;
 
  371   TrajectoryObservationSet::const_iterator pathEnd;
 
  373   while(itResultBegin!=itResultEnd && itOriginBegin!=itOriginEnd)
 
  375      if(!geom.
intersects(itOriginBegin->second.get())) 
 
  378         if(itResultBegin!=itResultEnd)
 
  380           shrdt.reset(static_cast<te::dt::DateTime*>((*itResultBegin)->clone()));
 
  381           itOriginBegin = m_observations.find(shrdt);
 
  386         pathBegin = itOriginBegin;
 
  388         while( itResultBegin!=itResultEnd && itOriginBegin!=itOriginEnd
 
  389             && (*itResultBegin == itOriginBegin->first.get())
 
  390             && geom.
intersects(itOriginBegin->second.get()))
 
  392             pathEnd = itOriginBegin;
 
  394             if(itResultBegin!=itResultEnd)
 
  396               shrdt.reset(static_cast<te::dt::DateTime*>((*itResultBegin)->clone()));
 
  397               itOriginBegin = m_observations.find(shrdt);
 
  403         if(pathEnd!=itOriginEnd)
 
  417                       std::vector<TrajectoryPatch>& result)
 const 
  424   std::vector<TrajectoryPatch> res2;
 
  427   std::vector<TrajectoryPatch>::const_iterator it = res2.begin();
 
  429   TrajectoryObservationSet::const_iterator itObsEnd = m_observations.end();
 
  431   while(it!=res2.end())
 
  440     if(itAuxBegin!=tj.
end())
 
  447     if(itAuxEnd==tj.
end())
 
  469                       std::vector<TrajectoryPatch>& result)
 const 
  476   std::vector<TrajectoryPatch> res2;
 
  479   std::vector<TrajectoryPatch>::const_iterator it = res2.begin();
 
  481   TrajectoryObservationSet::const_iterator itObsEnd = m_observations.end();
 
  483   while(it!=res2.end())
 
  492     if(itAuxBegin!=tj.
end())
 
  499     if(itAuxEnd==tj.
end())
 
  522   TrajectoryObservationSet::const_iterator it = m_observations.begin();
 
  524   while(it!=m_observations.end())
 
  527     std::auto_ptr<te::gm::Geometry> otherGeom(other.
getGeometry(t));
 
  529     double dist = it->second->distance(otherGeom.get());
 
  532     result->add(static_cast<te::dt::DateTime*>(t->
clone()),dist);
 
TEDATATYPEEXPORT DateTimePeriod * GetTemporalExtent(const DateTime *t1, const DateTime *t2)
It returns the temporal extent of two date and time types. 
 
TrajectoryPatch getPatch(const te::dt::DateTime &dt, te::dt::TemporalRelation r=te::dt::DURING) const 
It returns a trajectory subset that satisfies a given temporal relation. 
 
TrajectoryIterator begin() const 
It returns an iterator that points to the first observation of the trajectory. 
 
virtual AbstractData * clone() const =0
It returns a clone of this object. 
 
boost::shared_ptr< DateTime > DateTimeShrPtr
 
A class to represent trajectory. 
 
Trajectory & operator=(const Trajectory &other)
Copy assignment operator. 
 
TrajectoryIterator begin() const 
 
virtual bool intersects(const Geometry *const rhs) const 
It returns true if the geometry object spatially intersects rhs geometry. 
 
te::dt::DateTime * getTime() const 
It returns the datetime pointed by the internal cursor. 
 
TjRTreeShrPtr m_rtree
The RTree to index the trajectory geometries. 
 
std::pair< te::dt::DateTimeShrPtr, te::gm::GeometryShrPtr > TrajectoryObservation
 
A class that represents an R-tree. 
 
This file contains a class to represent a trajectory. 
 
Trajectory * clone() const 
It returns a clone of this trajectory. 
 
Trajectory()
Empty constructor. 
 
TrajectoryObservationSet m_observations
The trajectory observations. 
 
SpatialRelation
Spatial relations between geometric objects. 
 
std::map< te::dt::DateTimeShrPtr, te::gm::GeometryShrPtr, CompareShrDateTime > TrajectoryObservationSet
 
std::auto_ptr< TimeSeries > getDistance(const Trajectory &other) const 
It returns the distance between two trajectories. 
 
TrajectoryIterator at(te::dt::DateTime *t) const 
It returns an iterator that points to an observation at a given time. 
 
std::auto_ptr< te::gm::Geometry > getGeometry(te::dt::DateTime *t) const 
It returns the geometry associated to a given date and time. 
 
void setInterpolator(AbstractTrajectoryInterp *interp)
It sets the interpolator associated to the path. 
 
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards. 
 
void setId(const std::string &id)
It sets the trajectory id. 
 
void add(te::dt::DateTime *time, te::gm::Geometry *geom)
It adds an observation (time and geometry) into the trajectory. 
 
TemporalRelation
Temporal relations between date and time (Source: Allen, 1991). 
 
std::size_t size() const 
It returns the size of the trajectory observations. 
 
A class to traverse the observations of a trajectory. 
 
virtual ~Trajectory()
Virtual destructor. 
 
An auxiliary struct to compare two datetime pointers. 
 
A class to represent time series. 
 
boost::shared_ptr< Geometry > GeometryShrPtr
 
AbstractTrajectoryInterp * getInterpolator() const 
It returns the interpolator associated to the trajectory. 
 
std::string m_id
The trajectory identification. 
 
TrajectoryIterator end() const 
 
const TrajectoryObservationSet & getObservations() const 
It returns the trajectory observations. 
 
const Envelope * getMBR() const 
It returns the minimum bounding rectangle for the geometry in an internal representation. 
 
te::gm::Envelope getSpatialExtent() const 
It returns the spatial extent of the trajectory observations. 
 
std::string getId() const 
It returns the trajectory id. 
 
A struct to represent a patch or a continuous piece of a trajectory. 
 
An Envelope defines a 2D rectangular region. 
 
An abstract class for an interpolation function or interpolator that estimates geometries at non-obse...
 
AbstractTrajectoryInterp * m_interpolator
The interpolator used to estimate non-observed times. 
 
std::auto_ptr< te::dt::DateTimePeriod > getTemporalExtent() const 
It returns the temporal extent of the trajectory observations. 
 
TrajectoryIterator end() const 
It returns an iterator that points to the end of the trajectory. 
 
void getPatches(const te::gm::Envelope &g, te::gm::SpatialRelation r, std::vector< TrajectoryPatch > &result) const 
It returns trajectory subsets that satisfy a given spatial relation. 
 
It is an interpolation function the estimates the nearest geometry at a given non-observed time of a ...