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) {
113 outputDescription(outputDescr),
114 snapDistanceInMeters(Distance::Of<
Meter>(25.0))
122 distanceFromStart =Distance::Of<Meter>(0.0);
123 durationFromStart =
Duration(osmscout::Duration::zero());
124 locationOnRoute =route->
Nodes().begin();
125 nextWaypoint =route->
Nodes().begin();
126 outputDescription->Clear();
127 outputDescription->NextDescription(Distance::Of<Meter>(-1.0),
129 route->
Nodes().end());
130 std::list<RouteDescription::Node>::const_iterator lastWaypoint=--(route->
Nodes().end());
131 duration=lastWaypoint->GetTime();
132 distance=lastWaypoint->GetDistance();
142 return route!=
nullptr;
147 snapDistanceInMeters=distance;
152 return distanceFromStart;
157 return durationFromStart;
172 return outputDescription->GetDescription();
177 return *locationOnRoute;
183 auto foundNode =locationOnRoute;
184 double foundAbscissa=0.0;
186 bool found=SearchClosestSegment(location,
191 locationOnRoute=foundNode;
193 auto nextNode=foundNode;
196 outputDescription->NextDescription(locationOnRoute->GetDistance(),
198 route->
Nodes().end());
199 if (foundAbscissa<0.0) {
202 else if (foundAbscissa>1.0) {
206 nextNode->GetDistance()*foundAbscissa+locationOnRoute->GetDistance()*(1.0-foundAbscissa);
208 std::chrono::duration_cast<
Duration>(
209 nextNode->GetTime()*foundAbscissa+locationOnRoute->GetTime()*(1.0-foundAbscissa));
218 if(route ==
nullptr){
221 std::list<RouteDescription::Node>::const_iterator nextNode = route->
Nodes().begin();
222 GeoCoord intersection, foundIntersection;
224 double minDistance=std::numeric_limits<double>::max();
225 for (
auto node=nextNode++; node!=route->
Nodes().end(); node++) {
226 if (nextNode==route->
Nodes().end()) {
231 nextNode->GetLocation(),
234 if (minDistance > d) {
236 foundIntersection = intersection;
240 locOnRoute = foundIntersection;
247 std::list<RouteDescription::Node>::const_iterator locationOnRoute;
248 std::list<RouteDescription::Node>::const_iterator nextWaypoint;
250 Distance distanceFromStart;
254 Distance snapDistanceInMeters;
std::list< Node > & Nodes()
Definition: RouteDescription.h:803
Distance GetDistanceFromStart()
Definition: Navigation.h:150
OSMSCOUT_API double GetDistanceInLonDegrees(const Distance &d, double latitude=0)
Definition: RouteDescription.h:667
Definition: RouteDescription.h:53
virtual NodeDescriptionTmpl GetDescription()
Definition: Navigation.h:44
const RouteDescription::Node & GetCurrentNode()
Definition: Navigation.h:175
virtual ~OutputDescription()=default
bool HasRoute()
Definition: Navigation.h:140
virtual void Clear()
Definition: Navigation.h:47
void SetRoute(RouteDescription *newRoute)
Definition: Navigation.h:118
void Clear()
Definition: Navigation.h:135
bool UpdateCurrentLocation(const GeoCoord &location, double &minDistance)
Definition: Navigation.h:180
OSMSCOUT_API double DistanceToSegment(double px, double py, double p1x, double p1y, double p2x, double p2y, double &r, double &qx, double &qy)
Duration GetDurationFromStart()
Definition: Navigation.h:155
NodeDescriptionTmpl description
Definition: Navigation.h:48
Definition: Navigation.h:34
Navigation(OutputDescription< NodeDescriptionTmpl > *outputDescr)
Definition: Navigation.h:111
Distance GetDistance()
Definition: Navigation.h:160
void SetSnapDistance(const Distance &distance)
Definition: Navigation.h:145
Definition: Distance.h:203
Timestamp::duration Duration
Definition: Time.h:29
virtual void NextDescription(const Distance &, std::list< RouteDescription::Node >::const_iterator &, std::list< RouteDescription::Node >::const_iterator)
Definition: Navigation.h:39
Duration GetDuration()
Definition: Navigation.h:165
NodeDescriptionTmpl nextWaypointDescription()
Definition: Navigation.h:170
bool ClosestPointOnRoute(const GeoCoord &location, GeoCoord &locOnRoute)
Definition: Navigation.h:216
Definition: Navigation.h:54