1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
10 /// @file    SUMOVehicleParameter.h
11 /// @author  Daniel Krajzewicz
12 /// @author  Jakob Erdmann
13 /// @author  Axel Wegener
14 /// @author  Michael Behrisch
15 /// @date    2006-01-24
16 /// @version $Id$
17 ///
18 // Structure representing possible vehicle parameter
19 /****************************************************************************/
20 #ifndef SUMOVehicleParameter_h
21 #define SUMOVehicleParameter_h
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #include <config.h>
28 
29 #include <string>
30 #include <utils/common/Parameterised.h>
31 #include <utils/common/RGBColor.h>
32 #include <utils/common/SUMOTime.h>
33 #include <utils/common/SUMOVehicleClass.h>
34 
35 
36 // ===========================================================================
37 // class declarations
38 // ===========================================================================
39 class OutputDevice;
40 class OptionsCont;
41 
42 
43 // ===========================================================================
44 // value definitions
45 // ===========================================================================
46 const int VEHPARS_COLOR_SET = 1;
47 const int VEHPARS_VTYPE_SET = 2;
48 const int VEHPARS_DEPARTLANE_SET = 2 << 1;
49 const int VEHPARS_DEPARTPOS_SET = 2 << 2;
50 const int VEHPARS_DEPARTSPEED_SET = 2 << 3;
51 const int VEHPARS_END_SET = 2 << 4;
52 const int VEHPARS_NUMBER_SET = 2 << 5;
53 const int VEHPARS_PERIOD_SET = 2 << 6;
54 const int VEHPARS_VPH_SET = 2 << 7;
55 const int VEHPARS_PROB_SET = 2 << 8;
56 const int VEHPARS_ROUTE_SET = 2 << 9;
57 const int VEHPARS_ARRIVALLANE_SET = 2 << 10;
58 const int VEHPARS_ARRIVALPOS_SET = 2 << 11;
59 const int VEHPARS_ARRIVALSPEED_SET = 2 << 12;
60 const int VEHPARS_LINE_SET = 2 << 13;
61 const int VEHPARS_FROM_TAZ_SET = 2 << 14;
62 const int VEHPARS_TO_TAZ_SET = 2 << 15;
63 const int VEHPARS_FORCE_REROUTE = 2 << 16;
64 const int VEHPARS_PERSON_CAPACITY_SET = 2 << 17;
65 const int VEHPARS_PERSON_NUMBER_SET = 2 << 18;
66 const int VEHPARS_CONTAINER_NUMBER_SET = 2 << 19;
67 const int VEHPARS_DEPARTPOSLAT_SET = 2 << 20;
68 const int VEHPARS_ARRIVALPOSLAT_SET = 2 << 21;
69 const int VEHPARS_VIA_SET = 2 << 22;
70 
71 const int STOP_INDEX_END = -1;
72 const int STOP_INDEX_FIT = -2;
73 
74 const int STOP_END_SET = 1;
75 const int STOP_START_SET = 2;
76 const int STOP_TRIGGER_SET = 2 << 1;
77 const int STOP_PARKING_SET = 2 << 2;
78 const int STOP_EXPECTED_SET = 2 << 3;
79 const int STOP_CONTAINER_TRIGGER_SET = 2 << 4;
80 const int STOP_EXPECTED_CONTAINERS_SET = 2 << 5;
81 const int STOP_TRIP_ID_SET = 2 << 6;
82 
83 
84 // ===========================================================================
85 // enum definitions
86 // ===========================================================================
87 /**
88  * @enum DepartDefinition
89  * @brief Possible ways to depart
90  */
91 enum DepartDefinition {
92     /// @brief The time is given
93     DEPART_GIVEN,
94     /// @brief The departure is person triggered
95     DEPART_TRIGGERED,
96     /// @brief The departure is container triggered
97     DEPART_CONTAINER_TRIGGERED,
98     /// @brief The vehicle is discarded if emission fails (not fully implemented yet)
99     DEPART_NOW,
100     /// @brief Tag for the last element in the enum for safe int casting
101     DEPART_DEF_MAX
102 };
103 
104 
105 /**
106  * @enum DepartLaneDefinition
107  * @brief Possible ways to choose a lane on depart
108  */
109 enum DepartLaneDefinition {
110     /// @brief No information given; use default
111     DEPART_LANE_DEFAULT,
112     /// @brief The lane is given
113     DEPART_LANE_GIVEN,
114     /// @brief The lane is chosen randomly
115     DEPART_LANE_RANDOM,
116     /// @brief The least occupied lane is used
117     DEPART_LANE_FREE,
118     /// @brief The least occupied lane from lanes which allow the continuation
119     DEPART_LANE_ALLOWED_FREE,
120     /// @brief The least occupied lane from best lanes
121     DEPART_LANE_BEST_FREE,
122     /// @brief The rightmost lane the vehicle may use
123     DEPART_LANE_FIRST_ALLOWED,
124     /// @brief Tag for the last element in the enum for safe int casting
125     DEPART_LANE_DEF_MAX
126 };
127 
128 
129 /**
130  * @enum DepartPosDefinition
131  * @brief Possible ways to choose the departure position
132  */
133 enum DepartPosDefinition {
134     /// @brief No information given; use default
135     DEPART_POS_DEFAULT,
136     /// @brief The position is given
137     DEPART_POS_GIVEN,
138     /// @brief The position is chosen randomly
139     DEPART_POS_RANDOM,
140     /// @brief A free position is chosen
141     DEPART_POS_FREE,
142     /// @brief Back-at-zero position
143     DEPART_POS_BASE,
144     /// @brief Insert behind the last vehicle as close as possible to still allow the specified departSpeed. Fallback to DEPART_POS_BASE if there is no vehicle on the departLane yet.
145     DEPART_POS_LAST,
146     /// @brief If a fixed number of random choices fails, a free position is chosen
147     DEPART_POS_RANDOM_FREE,
148     /// @brief Tag for the last element in the enum for safe int casting
149     DEPART_POS_DEF_MAX
150 };
151 
152 
153 /**
154  * @enum DepartPosDefinition
155  * @brief Possible ways to choose the departure position
156  */
157 enum DepartPosLatDefinition {
158     /// @brief No information given; use default
159     DEPART_POSLAT_DEFAULT,
160     /// @brief The position is given
161     DEPART_POSLAT_GIVEN,
162     /// @brief At the rightmost side of the lane
163     DEPART_POSLAT_RIGHT,
164     /// @brief At the center of the lane
165     DEPART_POSLAT_CENTER,
166     /// @brief At the leftmost side of the lane
167     DEPART_POSLAT_LEFT,
168     /// @brief The lateral position is chosen randomly
169     DEPART_POSLAT_RANDOM,
170     /// @brief A free lateral position is chosen
171     DEPART_POSLAT_FREE,
172     /// @brief If a fixed number of random choices fails, a free lateral position is chosen
173     DEPART_POSLAT_RANDOM_FREE,
174     /// @brief Tag for the last element in the enum for safe int casting
175     DEPART_POSLAT_DEF_MAX
176 };
177 
178 
179 /**
180  * @enum DepartSpeedDefinition
181  * @brief Possible ways to choose the departure speed
182  */
183 enum DepartSpeedDefinition {
184     /// @brief No information given; use default
185     DEPART_SPEED_DEFAULT,
186     /// @brief The speed is given
187     DEPART_SPEED_GIVEN,
188     /// @brief The speed is chosen randomly
189     DEPART_SPEED_RANDOM,
190     /// @brief The maximum speed is used
191     DEPART_SPEED_MAX,
192     /// @brief Tag for the last element in the enum for safe int casting
193     DEPART_SPEED_DEF_MAX
194 };
195 
196 
197 /**
198  * @enum ArrivalLaneDefinition
199  * @brief Possible ways to choose the arrival lane
200  */
201 enum ArrivalLaneDefinition {
202     /// @brief No information given; use default
203     ARRIVAL_LANE_DEFAULT,
204     /// @brief The arrival lane is given
205     ARRIVAL_LANE_GIVEN,
206     /// @brief The current lane shall be used
207     ARRIVAL_LANE_CURRENT,
208     /// @brief Tag for the last element in the enum for safe int casting
209     ARRIVAL_LANE_DEF_MAX
210 };
211 
212 
213 /**
214  * @enum ArrivalPosDefinition
215  * @brief Possible ways to choose the arrival position
216  */
217 enum ArrivalPosDefinition {
218     /// @brief No information given; use default
219     ARRIVAL_POS_DEFAULT,
220     /// @brief The arrival position is given
221     ARRIVAL_POS_GIVEN,
222     /// @brief The arrival position is chosen randomly
223     ARRIVAL_POS_RANDOM,
224     /// @brief Half the road length
225     ARRIVAL_POS_CENTER,
226     /// @brief The maximum arrival position is used
227     ARRIVAL_POS_MAX,
228     /// @brief Tag for the last element in the enum for safe int casting
229     ARRIVAL_POS_DEF_MAX
230 };
231 
232 
233 /**
234  * @enum ArrivalPosLatDefinition
235  * @brief Possible ways to choose the departure position
236  */
237 enum ArrivalPosLatDefinition {
238     /// @brief No information given; use default
239     ARRIVAL_POSLAT_DEFAULT,
240     /// @brief The position is given
241     ARRIVAL_POSLAT_GIVEN,
242     /// @brief At the rightmost side of the lane
243     ARRIVAL_POSLAT_RIGHT,
244     /// @brief At the center of the lane
245     ARRIVAL_POSLAT_CENTER,
246     /// @brief At the leftmost side of the lane
247     ARRIVAL_POSLAT_LEFT,
248     /// @brief Tag for the last element in the enum for safe int casting
249     ARRIVAL_POSLAT_DEF_MAX
250 };
251 
252 
253 /**
254  * @enum ArrivalSpeedDefinition
255  * @brief Possible ways to choose the arrival speed
256  */
257 enum ArrivalSpeedDefinition {
258     /// @brief No information given; use default
259     ARRIVAL_SPEED_DEFAULT,
260     /// @brief The speed is given
261     ARRIVAL_SPEED_GIVEN,
262     /// @brief The current speed is used
263     ARRIVAL_SPEED_CURRENT,
264     /// @brief Tag for the last element in the enum for safe int casting
265     ARRIVAL_SPEED_DEF_MAX
266 };
267 
268 
269 // ===========================================================================
270 // struct definitions
271 // ===========================================================================
272 /**
273  * @class SUMOVehicleParameter
274  * @brief Structure representing possible vehicle parameter
275  *
276  * When used within a vehicle, parameter are usually const except for selected items
277  *  adaptable via TraCI which are flagged as mutable below
278  * The fields yielding with "Procedure" describe whether the according value
279  *  shall be used or another procedure is used to choose the value.
280  * @see DepartLaneDefinition
281  * @see DepartPosDefinition
282  * @see DepartSpeedDefinition
283  */
284 class SUMOVehicleParameter : public Parameterised {
285 public:
286     /** @brief Constructor
287      *
288      * Initialises the structure with default values
289      */
290     SUMOVehicleParameter();
291 
292     /// @brief Destructor
293     virtual ~SUMOVehicleParameter();
294 
295     /** @brief Returns whether the given parameter was set
296      * @param[in] what The parameter which one asks for
297      * @return Whether the given parameter was set
298      */
wasSet(int what)299     bool wasSet(int what) const {
300         return (parametersSet & what) != 0;
301     }
302 
303 
304     /** @brief Writes the parameters as a beginning element
305      *
306      * @param[in, out] dev The device to write into
307      * @param[in] oc The options to get defaults from
308      * @param[in] tag The "root" tag to write (defaults to vehicle)
309      * @param[in] tag The typeID to write (defaults to member vtypeid)
310      * @exception IOError not yet implemented
311      */
312     void write(OutputDevice& dev, const OptionsCont& oc, const SumoXMLTag tag = SUMO_TAG_VEHICLE, const std::string& typeID = "") const;
313 
314 
315     /** @brief Returns whether the defaults shall be used
316      * @param[in] oc The options to get the options from
317      * @param[in] optionName The name of the option to determine whether its value shall be used
318      * @return Whether the option is set and --defaults-override was set
319      */
320     bool defaultOptionOverrides(const OptionsCont& oc, const std::string& optionName) const;
321 
322 
323 
324     /// @name Depart/arrival-attributes verification
325     /// @{
326 
327     /** @brief Validates a given depart value
328      * @param[in] val The depart value to parse
329      * @param[in] element The name of the type of the parsed element, for building the error message
330      * @param[in] id The id of the parsed element, for building the error message
331      * @param[out] depart The parsed depart time, if given
332      * @param[out] dd The parsed departProcedure definition
333      * @param[out] error Error message, if an error occures
334      * @return Whether the given value is a valid depart definition
335      */
336     static bool parseDepart(const std::string& val, const std::string& element, const std::string& id,
337                             SUMOTime& depart, DepartDefinition& dd, std::string& error);
338 
339 
340     /** @brief Validates a given departLane value
341      * @param[in] val The departLane value to parse
342      * @param[in] element The name of the type of the parsed element, for building the error message
343      * @param[in] id The id of the parsed element, for building the error message
344      * @param[out] lane The parsed lane, if given
345      * @param[out] dld The parsed departLane definition
346      * @param[out] error Error message, if an error occures
347      * @return Whether the given value is a valid departLane definition
348      */
349     static bool parseDepartLane(const std::string& val, const std::string& element, const std::string& id,
350                                 int& lane, DepartLaneDefinition& dld, std::string& error);
351 
352 
353     /** @brief Validates a given departPos value
354      * @param[in] val The departPos value to parse
355      * @param[in] element The name of the type of the parsed element, for building the error message
356      * @param[in] id The id of the parsed element, for building the error message
357      * @param[out] pos The parsed position, if given
358      * @param[out] dpd The parsed departPos definition
359      * @param[out] error Error message, if an error occures
360      * @return Whether the given value is a valid departPos definition
361      */
362     static bool parseDepartPos(const std::string& val, const std::string& element, const std::string& id,
363                                double& pos, DepartPosDefinition& dpd, std::string& error);
364 
365 
366     /** @brief Validates a given departPosLat value
367      * @param[in] val The departPosLat value to parse
368      * @param[in] element The name of the type of the parsed element, for building the error message
369      * @param[in] id The id of the parsed element, for building the error message
370      * @param[out] pos The parsed position, if given
371      * @param[out] dpd The parsed departPos definition
372      * @param[out] error Error message, if an error occures
373      * @return Whether the given value is a valid departPos definition
374      */
375     static bool parseDepartPosLat(const std::string& val, const std::string& element, const std::string& id,
376                                   double& pos, DepartPosLatDefinition& dpd, std::string& error);
377 
378 
379     /** @brief Validates a given departSpeed value
380      * @param[in] val The departSpeed value to parse
381      * @param[in] element The name of the type of the parsed element, for building the error message
382      * @param[in] id The id of the parsed element, for building the error message
383      * @param[out] speed The parsed speed, if given
384      * @param[out] dsd The parsed departSpeed definition
385      * @param[out] error Error message, if an error occures
386      * @return Whether the given value is a valid departSpeed definition
387      */
388     static bool parseDepartSpeed(const std::string& val, const std::string& element, const std::string& id,
389                                  double& speed, DepartSpeedDefinition& dsd, std::string& error);
390 
391 
392     /** @brief Validates a given arrivalLane value
393      * @param[in] val The arrivalLane value to parse
394      * @param[in] element The name of the type of the parsed element, for building the error message
395      * @param[in] id The id of the parsed element, for building the error message
396      * @param[out] lane The parsed lane, if given
397      * @param[out] ald The parsed arrivalLane definition
398      * @param[out] error Error message, if an error occures
399      * @return Whether the given value is a valid arrivalLane definition
400      */
401     static bool parseArrivalLane(const std::string& val, const std::string& element, const std::string& id,
402                                  int& lane, ArrivalLaneDefinition& ald, std::string& error);
403 
404 
405     /** @brief Validates a given arrivalPos value
406      * @param[in] val The arrivalPos value to parse
407      * @param[in] element The name of the type of the parsed element, for building the error message
408      * @param[in] id The id of the parsed element, for building the error message
409      * @param[out] pos The parsed position, if given
410      * @param[out] apd The parsed arrivalPos definition
411      * @param[out] error Error message, if an error occures
412      * @return Whether the given value is a valid arrivalPos definition
413      */
414     static bool parseArrivalPos(const std::string& val, const std::string& element, const std::string& id,
415                                 double& pos, ArrivalPosDefinition& apd, std::string& error);
416 
417 
418     /** @brief Validates a given arrivalPosLat value
419      * @param[in] val The arrivalPosLat value to parse
420      * @param[in] element The name of the type of the parsed element, for building the error message
421      * @param[in] id The id of the parsed element, for building the error message
422      * @param[out] pos The parsed position, if given
423      * @param[out] apd The parsed arrivalPos definition
424      * @param[out] error Error message, if an error occures
425      * @return Whether the given value is a valid arrivalPos definition
426      */
427     static bool parseArrivalPosLat(const std::string& val, const std::string& element, const std::string& id,
428                                    double& pos, ArrivalPosLatDefinition& apd, std::string& error);
429 
430 
431     /** @brief Validates a given arrivalSpeed value
432      * @param[in] val The arrivalSpeed value to parse
433      * @param[in] element The name of the type of the parsed element, for building the error message
434      * @param[in] id The id of the parsed element, for building the error message
435      * @param[out] speed The parsed speed, if given
436      * @param[out] asd The parsed arrivalSpeed definition
437      * @param[out] error Error message, if an error occures
438      * @return Whether the given value is a valid arrivalSpeed definition
439      */
440     static bool parseArrivalSpeed(const std::string& val, const std::string& element, const std::string& id,
441                                   double& speed, ArrivalSpeedDefinition& asd, std::string& error);
442     /// @}
443 
444 
445     /** @brief Interprets negative edge positions and fits them onto a given edge
446      * @param[in] pos The position to be interpreted
447      * @param[in] maximumValue The maximum allowed value (edge length)
448      * @param[in] attr The attribute from which the value originated
449      * @param[in] id The id of the object to which this attribute belongs
450      * @return Whether the interpreted position
451      */
452     static double interpretEdgePos(double pos, double maximumValue, SumoXMLAttr attr, const std::string& id);
453 
454     /// @brief The vehicle's id
455     std::string id;
456 
457     /// @brief The vehicle's route id
458     std::string routeid;
459 
460     /// @brief The vehicle's type id
461     std::string vtypeid;
462 
463     /// @brief The vehicle's color, TraCI may change this
464     mutable RGBColor color;
465 
466     /// @name Departure definition
467     /// @{
468 
469     /// @brief The vehicle's departure time
470     SUMOTime depart;
471     /// @brief Information how the vehicle shall choose the depart time
472     DepartDefinition departProcedure;
473     /// @brief (optional) The lane the vehicle shall depart from (index in edge)
474     int departLane;
475     /// @brief Information how the vehicle shall choose the lane to depart from
476     DepartLaneDefinition departLaneProcedure;
477     /// @brief (optional) The position the vehicle shall depart from
478     double departPos;
479     /// @brief Information how the vehicle shall choose the departure position
480     DepartPosDefinition departPosProcedure;
481     /// @brief (optional) The lateral position the vehicle shall depart from
482     double departPosLat;
483     /// @brief Information how the vehicle shall choose the lateral departure position
484     DepartPosLatDefinition departPosLatProcedure;
485     /// @brief (optional) The initial speed of the vehicle
486     double departSpeed;
487     /// @brief Information how the vehicle's initial speed shall be chosen
488     DepartSpeedDefinition departSpeedProcedure;
489     /// @}
490 
491     /// @name Arrival definition
492     /// @{
493 
494     /// @brief (optional) The lane the vehicle shall arrive on (not used yet)
495     int arrivalLane;
496     /// @brief Information how the vehicle shall choose the lane to arrive on
497     ArrivalLaneDefinition arrivalLaneProcedure;
498     /// @brief (optional) The position the vehicle shall arrive on
499     double arrivalPos;
500     /// @brief Information how the vehicle shall choose the arrival position
501     ArrivalPosDefinition arrivalPosProcedure;
502     /// @brief (optional) The lateral position the vehicle shall arrive on
503     double arrivalPosLat;
504     /// @brief Information how the vehicle shall choose the lateral arrival position
505     ArrivalPosLatDefinition arrivalPosLatProcedure;
506     /// @brief (optional) The final speed of the vehicle (not used yet)
507     double arrivalSpeed;
508     /// @brief Information how the vehicle's end speed shall be chosen
509     ArrivalSpeedDefinition arrivalSpeedProcedure;
510     /// @}
511 
512     /// @name Repetition definition
513     /// @{
514 
515     /// @brief The number of times the vehicle shall be repeatedly inserted
516     int repetitionNumber;
517     /// @brief The number of times the vehicle was already inserted
518     int repetitionsDone;
519     /// @brief The time offset between vehicle reinsertions
520     SUMOTime repetitionOffset;
521     /// @brief The probability for emitting a vehicle per second
522     double repetitionProbability;
523     /// @brief The time at which the flow ends (only needed when using repetitionProbability)
524     SUMOTime repetitionEnd;
525     /// @}
526 
527     /// @brief The vehicle's line (mainly for public transport)
528     mutable std::string line;
529 
530     /// @brief The vehicle's origin zone (district)
531     std::string fromTaz;
532 
533     /// @brief The vehicle's destination zone (district)
534     std::string toTaz;
535 
536     /** @struct Stop
537      * @brief Definition of vehicle stop (position and duration)
538      */
539     struct Stop {
540         /// @brief The lane to stop at
541         std::string lane;
542         /// @brief (Optional) bus stop if one is assigned to the stop
543         std::string busstop;
544         /// @brief (Optional) container stop if one is assigned to the stop
545         std::string containerstop;
546         /// @brief (Optional) parking area if one is assigned to the stop
547         std::string parkingarea;
548         /// @brief (Optional) charging station if one is assigned to the stop
549         std::string chargingStation;
550         /// @brief The stopping position start
551         double startPos;
552         /// @brief The stopping position end
553         double endPos;
554         /// @brief The stopping duration
555         SUMOTime duration;
556         /// @brief The time at which the vehicle may continue its journey
557         SUMOTime until;
558         /// @brief whether an arriving person lets the vehicle continue
559         bool triggered;
560         /// @brief whether an arriving container lets the vehicle continue
561         bool containerTriggered;
562         /// @brief whether the vehicle is removed from the net while stopping
563         bool parking;
564         /// @brief IDs of persons the vehicle has to wait for until departing
565         std::set<std::string> awaitedPersons;
566         /// @brief IDs of containers the vehicle has to wait for until departing
567         std::set<std::string> awaitedContainers;
568         /// @brief id of the trip within a cyclical public transport route
569         std::string tripId;
570         /// @brief lanes and positions connected to this stop (only used by duarouter where Stop is used to store stopping places)
571         std::vector<std::tuple<std::string, double, double> > accessPos;
572         /// @brief at which position in the stops list
573         int index;
574         /// @brief Information for the output which parameter were set
575         int parametersSet = 0;
576 
577         /** @brief Writes the stop as XML
578          *
579          * @param[in, out] dev The device to write into
580          * @exception IOError not yet implemented
581          */
582         void write(OutputDevice& dev) const;
583     };
584 
585     /// @brief List of the stops the vehicle will make, TraCI may add entries here
586     mutable std::vector<Stop> stops;
587 
588     /// @brief List of the via-edges the vehicle must visit
589     mutable std::vector<std::string> via;
590 
591     /// @brief The static number of persons in the vehicle when it departs (not including boarding persons)
592     int personNumber;
593 
594     /// @brief The static number of containers in the vehicle when it departs
595     int containerNumber;
596 
597     /// @brief Information for the router which parameter were set, TraCI may modify this (whe changing color)
598     mutable int parametersSet;
599 
600 protected:
601     /// @brief obtain depart parameter in string format
602     std::string getDepart() const;
603 
604     /// @brief obtain depart lane parameter in string format
605     std::string getDepartLane() const;
606 
607     /// @brief obtain depart pos parameter in string format
608     std::string getDepartPos() const;
609 
610     /// @brief obtain depart pos lat parameter in string format
611     std::string getDepartPosLat() const;
612 
613     /// @brief obtain depart speed parameter in string format
614     std::string getDepartSpeed() const;
615 
616     /// @brief obtain arrival lane parameter in string format
617     std::string getArrivalLane() const;
618 
619     /// @brief obtain arrival pos parameter in string format
620     std::string getArrivalPos() const;
621 
622     /// @brief obtain arrival pos lat parameter in string format
623     std::string getArrivalPosLat() const;
624 
625     /// @brief obtain arrival speed parameter in string format
626     std::string getArrivalSpeed() const;
627 };
628 
629 #endif
630 
631 /****************************************************************************/
632 
633 
634