1#ifndef OSMSCOUT_NAVIGATION_NAVIGATION_H
2#define OSMSCOUT_NAVIGATION_NAVIGATION_H
33 template<
class NodeDescriptionTmpl>
40 std::list<RouteDescription::Node>::const_iterator& ,
41 std::list<RouteDescription::Node>::const_iterator )
53 template<
class NodeDescriptionTmpl>
63 bool SearchClosestSegment(
const GeoCoord& location,
64 std::list<RouteDescription::Node>::const_iterator& foundNode,
65 double& foundAbscissa,
68 auto nextNode=locationOnRoute;
72 minDistance=std::numeric_limits<double>::max();
76 for (
auto node=nextNode++; node!=route->Nodes().end(); node++) {
77 if (nextNode==route->Nodes().end()) {
82 node->GetLocation().GetLon(),
83 node->GetLocation().GetLat(),
84 nextNode->GetLocation().GetLon(),
85 nextNode->GetLocation().GetLat(),
91 if (d<=snapDistanceInDegrees) {
93 foundAbscissa=abscissa;
97 else if (found && d>minDistance*2) {
112 : outputDescription(outputDescr),
113 snapDistanceInMeters(Distance::Of<
Meter>(25.0))
121 distanceFromStart =Distance::Of<Meter>(0.0);
122 durationFromStart =
Duration(osmscout::Duration::zero());
123 locationOnRoute =route->Nodes().begin();
124 nextWaypoint =route->Nodes().begin();
125 outputDescription->Clear();
126 outputDescription->NextDescription(Distance::Of<Meter>(-1.0),
128 route->Nodes().end());
129 std::list<RouteDescription::Node>::const_iterator lastWaypoint=--(route->Nodes().end());
130 duration=lastWaypoint->GetTime();
131 distance=lastWaypoint->GetDistance();
141 return route!=
nullptr;
146 snapDistanceInMeters=distance;
151 return distanceFromStart;
156 return durationFromStart;
171 return outputDescription->GetDescription();
176 return *locationOnRoute;
182 auto foundNode =locationOnRoute;
183 double foundAbscissa=0.0;
185 bool found=SearchClosestSegment(location,
190 locationOnRoute=foundNode;
192 auto nextNode=foundNode;
195 outputDescription->NextDescription(locationOnRoute->GetDistance(),
197 route->Nodes().end());
198 if (foundAbscissa<0.0) {
201 else if (foundAbscissa>1.0) {
205 nextNode->GetDistance()*foundAbscissa+locationOnRoute->GetDistance()*(1.0-foundAbscissa);
207 std::chrono::duration_cast<Duration>(
208 nextNode->GetTime()*foundAbscissa+locationOnRoute->GetTime()*(1.0-foundAbscissa));
217 if(route ==
nullptr){
220 std::list<RouteDescription::Node>::const_iterator nextNode = route->Nodes().begin();
221 GeoCoord intersection, foundIntersection;
223 double minDistance=std::numeric_limits<double>::max();
224 for (
auto node=nextNode++; node!=route->Nodes().end(); node++) {
225 if (nextNode==route->Nodes().end()) {
230 nextNode->GetLocation(),
233 if (minDistance > d) {
235 foundIntersection = intersection;
239 locOnRoute = foundIntersection;
246 std::list<RouteDescription::Node>::const_iterator locationOnRoute;
247 std::list<RouteDescription::Node>::const_iterator nextWaypoint;
249 Distance distanceFromStart;
253 Distance snapDistanceInMeters;
Definition Distance.h:204
bool HasRoute() const
Definition Navigation.h:139
void SetRoute(RouteDescription *newRoute)
Definition Navigation.h:117
Duration GetDurationFromStart() const
Definition Navigation.h:154
Duration GetDuration() const
Definition Navigation.h:164
void Clear()
Definition Navigation.h:134
const RouteDescription::Node & GetCurrentNode() const
Definition Navigation.h:174
bool UpdateCurrentLocation(const GeoCoord &location, double &minDistance)
Definition Navigation.h:179
bool ClosestPointOnRoute(const GeoCoord &location, GeoCoord &locOnRoute)
Definition Navigation.h:215
Distance GetDistanceFromStart()
Definition Navigation.h:149
void SetSnapDistance(const Distance &distance)
Definition Navigation.h:144
Navigation(OutputDescription< NodeDescriptionTmpl > *outputDescr)
Definition Navigation.h:111
Distance GetDistance()
Definition Navigation.h:159
NodeDescriptionTmpl nextWaypointDescription()
Definition Navigation.h:169
Definition Navigation.h:35
virtual void Clear()
Definition Navigation.h:47
virtual void NextDescription(const Distance &, std::list< RouteDescription::Node >::const_iterator &, std::list< RouteDescription::Node >::const_iterator)
Definition Navigation.h:39
NodeDescriptionTmpl description
Definition Navigation.h:50
virtual ~OutputDescription()=default
virtual NodeDescriptionTmpl GetDescription()
Definition Navigation.h:44
Definition RouteDescription.h:688
Definition RouteDescription.h:55
OSMSCOUT_API double DistanceToSegment(double px, double py, double p1x, double p1y, double p2x, double p2y, double &r, double &qx, double &qy)
OSMSCOUT_API double GetDistanceInLonDegrees(const Distance &d, double latitude=0)
Timestamp::duration Duration
Definition Time.h:29