Marble

RoutingInstruction.h
1// SPDX-License-Identifier: LGPL-2.1-or-later
2//
3// SPDX-FileCopyrightText: 2010 Dennis Nienhüser <nienhueser@kde.org>
4//
5
6#ifndef MARBLE_ROUTINGINSTRUCTION_H
7#define MARBLE_ROUTINGINSTRUCTION_H
8
9#include "RoutingPoint.h"
10#include "RoutingWaypoint.h"
11#include "marble_export.h"
12
13#include <QList>
14#include <QMetaType>
15
16class QTextStream;
17
18namespace Marble
19{
20
21/**
22 * Stores data related to one instruction: Road name, angle to predecessor,
23 * associated waypoints etc. Can be streamed directly to a QTextStream.
24 */
25class MARBLE_EXPORT RoutingInstruction
26{
27public:
28 enum TurnType {
29 Unknown = 0,
30 Continue = 13 /** Continue on the next street */,
31 Merge = 14,
32 Straight = 1,
33 SlightRight = 2,
34 Right = 3,
35 SharpRight = 4,
36 TurnAround = 5 /** Perform a u-turn */,
37 SharpLeft = 6,
38 Left = 7,
39 SlightLeft = 8,
40 RoundaboutFirstExit = 9 /** Enter the roundabout and leave at the first exit */,
41 RoundaboutSecondExit = 10 /** Enter the roundabout and leave at the second exit */,
42 RoundaboutThirdExit = 11 /** Enter the roundabout and leave at the third exit */,
43 RoundaboutExit = 12 /** At the point where the roundabout should be exited */,
44 ExitLeft = 15,
45 ExitRight = 16
46 };
47
48 /** Constructor */
49 explicit RoutingInstruction(const RoutingWaypoint &item = RoutingWaypoint());
50
51 /**
52 * Append data of the given item, returns true if item's street
53 * name matches instructions street name
54 */
55 bool append(const RoutingWaypoint &item, int angle);
56
57 /** Name of the road to turn into */
58 QString roadName() const;
59
60 /** OSM type of the road to turn into */
61 QString roadType() const;
62
63 /** Estimated number of seconds to the route destination */
64 int secondsLeft() const;
65
66 /** Waypoints from the last instruction to this instruction */
68
69 /**
70 * Contains the intersection point and points near it on the previous and current road.
71 * Near is taken as that waypoint with the largest different to the intersection point
72 * that does not exceed 50 meter.
73 */
75
76 /** The angle between the two turn roads, in radians */
77 qreal angleToPredecssor() const;
78
79 /** Previous turn road. Will be 0 for the first one (route start) */
81
82 /** Const overload for #predecessor */
83 const RoutingInstruction *predecessor() const;
84
85 /** Change the predecessor */
87
88 /** Next turn road. Will be 0 for the last one (destination) */
90
91 /** Const overload for #successor */
92 const RoutingInstruction *successor() const;
93
94 /** Change the successor */
96
97 /** The accumulated distance of all waypoints belonging to this instruction */
98 qreal distance() const;
99
100 /** The distance from the route start */
101 qreal distanceFromStart() const;
102
103 /** The distance to the route end. Includes the own distance */
104 qreal distanceToEnd() const;
105
106 TurnType turnType() const;
107
108 /** Formats the instruction (road name) for a human reader */
110
111 /** Formats the instruction (distance to next instruction) for a human reader */
113
114 /** Formats the instruction (duration to destination) for a human reader */
116
117 /** Formats the instruction for a human reader */
118 QString instructionText() const;
119
120 static QString generateRoadInstruction(TurnType turnType, const QString &roadName);
121
122protected:
123 int roundaboutExitNumber() const;
124
125private:
126 void calculateAngle();
127
128 void calculateTurnType();
129
130 QList<RoutingWaypoint> m_points;
131
132 QList<RoutingPoint> m_intersectionPoints;
133
134 QString m_roadName;
135
136 QString m_roadType;
137
138 int m_secondsLeft;
139
140 qreal m_angleToPredecessor;
141
142 TurnType m_turnType;
143
144 int m_roundaboutExit;
145
146 RoutingInstruction *m_predecessor;
147
148 RoutingInstruction *m_successor;
149};
150
151QTextStream &operator<<(QTextStream &stream, const RoutingInstruction &i);
152
153using RoutingInstructions = QList<RoutingInstruction>;
154
155} // namespace Marble
156
157Q_DECLARE_METATYPE(Marble::RoutingInstruction::TurnType)
158
159#endif // MARBLE_ROUTINGINSTRUCTION_H
Stores data related to one instruction: Road name, angle to predecessor, associated waypoints etc.
bool append(const RoutingWaypoint &item, int angle)
Append data of the given item, returns true if item's street name matches instructions street name.
QString roadName() const
Name of the road to turn into.
QString totalDurationRemaining() const
Formats the instruction (duration to destination) for a human reader.
QList< RoutingWaypoint > points() const
Waypoints from the last instruction to this instruction.
RoutingInstruction(const RoutingWaypoint &item=RoutingWaypoint())
Constructor.
void setPredecessor(RoutingInstruction *predecessor)
Change the predecessor.
QString instructionText() const
Formats the instruction for a human reader.
QString nextDistanceInstruction() const
Formats the instruction (distance to next instruction) for a human reader.
qreal angleToPredecssor() const
The angle between the two turn roads, in radians.
QString nextRoadInstruction() const
Formats the instruction (road name) for a human reader.
qreal distanceToEnd() const
The distance to the route end.
QList< RoutingPoint > intersectionPoints() const
Contains the intersection point and points near it on the previous and current road.
QString roadType() const
OSM type of the road to turn into.
RoutingInstruction * predecessor()
Previous turn road.
qreal distanceFromStart() const
The distance from the route start.
int secondsLeft() const
Estimated number of seconds to the route destination.
RoutingInstruction * successor()
Next turn road.
void setSuccessor(RoutingInstruction *successor)
Change the successor.
qreal distance() const
The accumulated distance of all waypoints belonging to this instruction.
Stores one line of gosmore/routino output.
Binds a QML item to a specific geodetic location in screen coordinates.
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Jan 24 2025 11:52:10 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.