Eclipse SUMO - Simulation of Urban MObility
libtraci/Person.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2017-2024 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
18 // C++ TraCI client API implementation
19 /****************************************************************************/
20 #include <config.h>
21 
22 #define LIBTRACI 1
23 #include "Domain.h"
24 #include <libsumo/Person.h>
25 #include <libsumo/StorageHelper.h>
26 
27 namespace libtraci {
28 
29 typedef Domain<libsumo::CMD_GET_PERSON_VARIABLE, libsumo::CMD_SET_PERSON_VARIABLE> Dom;
30 
31 // ===========================================================================
32 // static member definitions
33 // ===========================================================================
34 std::vector<std::string>
35 Person::getIDList() {
37 }
38 
39 
40 int
41 Person::getIDCount() {
42  return Dom::getInt(libsumo::ID_COUNT, "");
43 }
44 
45 
47 Person::getPosition(const std::string& personID, const bool includeZ) {
48  return includeZ ? getPosition3D(personID) : Dom::getPos(libsumo::VAR_POSITION, personID);
49 }
50 
51 
53 Person::getPosition3D(const std::string& personID) {
54  return Dom::getPos3D(libsumo::VAR_POSITION3D, personID);
55 }
56 
57 
58 double
59 Person::getAngle(const std::string& personID) {
60  return Dom::getDouble(libsumo::VAR_ANGLE, personID);
61 }
62 
63 
64 double
65 Person::getSlope(const std::string& personID) {
66  return Dom::getDouble(libsumo::VAR_SLOPE, personID);
67 }
68 
69 
70 double
71 Person::getSpeed(const std::string& personID) {
72  return Dom::getDouble(libsumo::VAR_SPEED, personID);
73 }
74 
75 
76 std::string
77 Person::getRoadID(const std::string& personID) {
78  return Dom::getString(libsumo::VAR_ROAD_ID, personID);
79 }
80 
81 
82 std::string
83 Person::getLaneID(const std::string& personID) {
84  return Dom::getString(libsumo::VAR_LANE_ID, personID);
85 }
86 
87 
88 double
89 Person::getLanePosition(const std::string& personID) {
90  return Dom::getDouble(libsumo::VAR_LANEPOSITION, personID);
91 }
92 
93 
94 std::vector<libsumo::TraCIReservation>
95 Person::getTaxiReservations(int onlyNew) {
96  std::unique_lock<std::mutex> lock{ libtraci::Connection::getActive().getMutex() };
97  tcpip::Storage content;
98  StoHelp::writeTypedInt(content, onlyNew);
100  std::vector<libsumo::TraCIReservation> result;
101  int numReservations = ret.readInt();
102  while (numReservations-- > 0) {
104  StoHelp::readCompound(ret, 10);
105  r.id = StoHelp::readTypedString(ret);
114  r.state = StoHelp::readTypedInt(ret);
115  result.emplace_back(r);
116  }
117  return result;
118 }
119 
120 
121 std::string
122 Person::splitTaxiReservation(std::string reservationID, const std::vector<std::string>& personIDs) {
123  tcpip::Storage content;
124  StoHelp::writeTypedStringList(content, personIDs);
125  return Dom::getString(libsumo::SPLIT_TAXI_RESERVATIONS, reservationID, &content);
126 }
127 
128 
130 Person::getColor(const std::string& personID) {
131  return Dom::getCol(libsumo::VAR_COLOR, personID);
132 }
133 
134 
135 std::string
136 Person::getTypeID(const std::string& personID) {
137  return Dom::getString(libsumo::VAR_TYPE, personID);
138 }
139 
140 
141 double
142 Person::getWaitingTime(const std::string& personID) {
143  return Dom::getDouble(libsumo::VAR_WAITING_TIME, personID);
144 }
145 
146 
147 std::string
148 Person::getNextEdge(const std::string& personID) {
149  return Dom::getString(libsumo::VAR_NEXT_EDGE, personID);
150 }
151 
152 
153 std::vector<std::string>
154 Person::getEdges(const std::string& personID, int nextStageIndex) {
155  tcpip::Storage content;
157  content.writeInt(nextStageIndex);
158  return Dom::getStringVector(libsumo::VAR_EDGES, personID, &content);
159 }
160 
161 
163 Person::getStage(const std::string& personID, int nextStageIndex) {
164  tcpip::Storage content;
166  content.writeInt(nextStageIndex);
167  return Dom::getTraCIStage(libsumo::VAR_STAGE, personID, &content);
168 }
169 
170 
171 int
172 Person::getRemainingStages(const std::string& personID) {
173  return Dom::getInt(libsumo::VAR_STAGES_REMAINING, personID);
174 }
175 
176 
177 std::string
178 Person::getVehicle(const std::string& personID) {
179  return Dom::getString(libsumo::VAR_VEHICLE, personID);
180 }
181 
182 
183 std::string
184 Person::getEmissionClass(const std::string& personID) {
185  return Dom::getString(libsumo::VAR_EMISSIONCLASS, personID);
186 }
187 
188 
189 std::string
190 Person::getShapeClass(const std::string& personID) {
191  return Dom::getString(libsumo::VAR_SHAPECLASS, personID);
192 }
193 
194 
195 double
196 Person::getLength(const std::string& personID) {
197  return Dom::getDouble(libsumo::VAR_LENGTH, personID);
198 }
199 
200 
201 double
202 Person::getSpeedFactor(const std::string& personID) {
203  return Dom::getDouble(libsumo::VAR_SPEED_FACTOR, personID);
204 }
205 
206 
207 double
208 Person::getAccel(const std::string& personID) {
209  return Dom::getDouble(libsumo::VAR_ACCEL, personID);
210 }
211 
212 
213 double
214 Person::getDecel(const std::string& personID) {
215  return Dom::getDouble(libsumo::VAR_DECEL, personID);
216 }
217 
218 
219 double Person::getEmergencyDecel(const std::string& personID) {
221 }
222 
223 
224 double Person::getApparentDecel(const std::string& personID) {
226 }
227 
228 
229 double Person::getActionStepLength(const std::string& personID) {
231 }
232 
233 
234 double
235 Person::getTau(const std::string& personID) {
236  return Dom::getDouble(libsumo::VAR_TAU, personID);
237 }
238 
239 
240 double
241 Person::getImperfection(const std::string& personID) {
242  return Dom::getDouble(libsumo::VAR_IMPERFECTION, personID);
243 }
244 
245 
246 double
247 Person::getSpeedDeviation(const std::string& personID) {
249 }
250 
251 
252 std::string
253 Person::getVehicleClass(const std::string& personID) {
254  return Dom::getString(libsumo::VAR_VEHICLECLASS, personID);
255 }
256 
257 
258 double
259 Person::getMinGap(const std::string& personID) {
260  return Dom::getDouble(libsumo::VAR_MINGAP, personID);
261 }
262 
263 
264 double
265 Person::getMinGapLat(const std::string& personID) {
266  return Dom::getDouble(libsumo::VAR_MINGAP_LAT, personID);
267 }
268 
269 
270 double
271 Person::getMaxSpeed(const std::string& personID) {
272  return Dom::getDouble(libsumo::VAR_MAXSPEED, personID);
273 }
274 
275 
276 double
277 Person::getMaxSpeedLat(const std::string& personID) {
278  return Dom::getDouble(libsumo::VAR_MAXSPEED_LAT, personID);
279 }
280 
281 
282 std::string
283 Person::getLateralAlignment(const std::string& personID) {
284  return Dom::getString(libsumo::VAR_LATALIGNMENT, personID);
285 }
286 
287 
288 double
289 Person::getWidth(const std::string& personID) {
290  return Dom::getDouble(libsumo::VAR_WIDTH, personID);
291 }
292 
293 
294 double
295 Person::getHeight(const std::string& personID) {
296  return Dom::getDouble(libsumo::VAR_HEIGHT, personID);
297 }
298 
299 
300 int
301 Person::getPersonCapacity(const std::string& personID) {
302  return Dom::getInt(libsumo::VAR_PERSON_CAPACITY, personID);
303 }
304 
305 
306 double
307 Person::getBoardingDuration(const std::string& personID) {
309 }
310 
311 double
312 Person::getImpatience(const std::string& personID) {
313  return Dom::getDouble(libsumo::VAR_IMPATIENCE, personID);
314 }
315 
316 
317 
319 
320 
321 void
322 Person::setSpeed(const std::string& personID, double speed) {
323  Dom::setDouble(libsumo::VAR_SPEED, personID, speed);
324 }
325 
326 
327 void
328 Person::setType(const std::string& personID, const std::string& typeID) {
329  Dom::setString(libsumo::VAR_TYPE, personID, typeID);
330 }
331 
332 
333 void
334 Person::setImpatience(const std::string& personID, double impatience) {
335  Dom::setDouble(libsumo::VAR_IMPATIENCE, personID, impatience);
336 }
337 
338 void
339 Person::setBoardingDuration(const std::string& personID, double boardingDuration) {
340  Dom::setDouble(libsumo::VAR_BOARDING_DURATION, personID, boardingDuration);
341 }
342 
343 void
344 Person::add(const std::string& personID, const std::string& edgeID, double pos, double departInSecs, const std::string typeID) {
345  tcpip::Storage content;
347  content.writeInt(4);
349  content.writeString(typeID);
351  content.writeString(edgeID);
353  content.writeDouble(departInSecs);
355  content.writeDouble(pos);
356  Dom::set(libsumo::ADD, personID, &content);
357 }
358 
359 
360 void
361 Person::appendStage(const std::string& personID, const libsumo::TraCIStage& stage) {
362  tcpip::Storage content;
363  libsumo::StorageHelper::writeStage(content, stage);
364  Dom::set(libsumo::APPEND_STAGE, personID, &content);
365 }
366 
367 
368 void
369 Person::replaceStage(const std::string& personID, const int stageIndex, const libsumo::TraCIStage& stage) {
370  tcpip::Storage content;
372  content.writeInt(2);
374  content.writeInt(stageIndex);
375  libsumo::StorageHelper::writeStage(content, stage);
376  Dom::set(libsumo::REPLACE_STAGE, personID, &content);
377 }
378 
379 
380 void
381 Person::appendDrivingStage(const std::string& personID, const std::string& toEdge, const std::string& lines, const std::string& stopID) {
382  tcpip::Storage content;
384  content.writeInt(4);
388  content.writeString(toEdge);
390  content.writeString(lines);
392  content.writeString(stopID);
393  Dom::set(libsumo::APPEND_STAGE, personID, &content);
394 }
395 
396 
397 void
398 Person::appendWaitingStage(const std::string& personID, double duration, const std::string& description, const std::string& stopID) {
399  tcpip::Storage content;
401  content.writeInt(4);
405  content.writeDouble(duration);
407  content.writeString(description);
409  content.writeString(stopID);
410  Dom::set(libsumo::APPEND_STAGE, personID, &content);
411 }
412 
413 
414 void
415 Person::appendWalkingStage(const std::string& personID, const std::vector<std::string>& edges, double arrivalPos, double duration, double speed, const std::string& stopID) {
416  tcpip::Storage content;
418  content.writeInt(6);
422  content.writeStringList(edges);
424  content.writeDouble(arrivalPos);
426  content.writeDouble(duration);
428  content.writeDouble(speed);
430  content.writeString(stopID);
431  Dom::set(libsumo::APPEND_STAGE, personID, &content);
432 }
433 
434 
435 void
436 Person::removeStage(const std::string& personID, int nextStageIndex) {
437  Dom::setInt(libsumo::REMOVE_STAGE, personID, nextStageIndex);
438 }
439 
440 
441 void
442 Person::rerouteTraveltime(const std::string& personID) {
443  tcpip::Storage content;
445  content.writeInt(0);
446  Dom::set(libsumo::CMD_REROUTE_TRAVELTIME, personID, &content);
447 }
448 
449 
450 void
451 Person::moveTo(const std::string& personID, const std::string& laneID, double pos, double posLat) {
452  tcpip::Storage content;
454  content.writeInt(3);
456  content.writeString(laneID);
458  content.writeDouble(pos);
460  content.writeDouble(posLat);
461  Dom::set(libsumo::VAR_MOVE_TO, personID, &content);
462 }
463 
464 
465 void
466 Person::moveToXY(const std::string& personID, const std::string& edgeID, const double x, const double y, double angle, const int keepRoute, double matchThreshold) {
467  tcpip::Storage content;
469  content.writeInt(6);
471  content.writeString(edgeID);
473  content.writeDouble(x);
475  content.writeDouble(y);
477  content.writeDouble(angle);
479  content.writeByte(keepRoute);
480  StoHelp::writeTypedDouble(content, matchThreshold);
481  Dom::set(libsumo::MOVE_TO_XY, personID, &content);
482 }
483 
484 
487 void
488 Person::setLength(const std::string& personID, double length) {
489  Dom::setDouble(libsumo::VAR_LENGTH, personID, length);
490 }
491 
492 
493 void
494 Person::setMaxSpeed(const std::string& personID, double speed) {
495  Dom::setDouble(libsumo::VAR_MAXSPEED, personID, speed);
496 }
497 
498 
499 void
500 Person::setVehicleClass(const std::string& personID, const std::string& clazz) {
501  Dom::setString(libsumo::VAR_VEHICLECLASS, personID, clazz);
502 }
503 
504 
505 void
506 Person::setShapeClass(const std::string& personID, const std::string& clazz) {
507  Dom::setString(libsumo::VAR_SHAPECLASS, personID, clazz);
508 }
509 
510 
511 void
512 Person::setEmissionClass(const std::string& personID, const std::string& clazz) {
513  Dom::setString(libsumo::VAR_EMISSIONCLASS, personID, clazz);
514 }
515 
516 
517 void
518 Person::setWidth(const std::string& personID, double width) {
519  Dom::setDouble(libsumo::VAR_WIDTH, personID, width);
520 }
521 
522 
523 void
524 Person::setHeight(const std::string& personID, double height) {
525  Dom::setDouble(libsumo::VAR_HEIGHT, personID, height);
526 }
527 
528 
529 void
530 Person::setMinGap(const std::string& personID, double minGap) {
531  Dom::setDouble(libsumo::VAR_MINGAP, personID, minGap);
532 }
533 
534 
535 void
536 Person::setAccel(const std::string& personID, double accel) {
537  Dom::setDouble(libsumo::VAR_ACCEL, personID, accel);
538 }
539 
540 
541 void
542 Person::setDecel(const std::string& personID, double decel) {
543  Dom::setDouble(libsumo::VAR_DECEL, personID, decel);
544 }
545 
546 
547 void
548 Person::setEmergencyDecel(const std::string& personID, double decel) {
550 }
551 
552 
553 void
554 Person::setApparentDecel(const std::string& personID, double decel) {
556 }
557 
558 
559 void
560 Person::setImperfection(const std::string& personID, double imperfection) {
561  Dom::setDouble(libsumo::VAR_IMPERFECTION, personID, imperfection);
562 }
563 
564 
565 void
566 Person::setTau(const std::string& personID, double tau) {
567  Dom::setDouble(libsumo::VAR_TAU, personID, tau);
568 }
569 
570 
571 void
572 Person::setMinGapLat(const std::string& personID, double minGapLat) {
573  Dom::setDouble(libsumo::VAR_MINGAP_LAT, personID, minGapLat);
574 }
575 
576 
577 void
578 Person::setMaxSpeedLat(const std::string& personID, double speed) {
579  Dom::setDouble(libsumo::VAR_MAXSPEED_LAT, personID, speed);
580 }
581 
582 
583 void
584 Person::setLateralAlignment(const std::string& personID, const std::string& latAlignment) {
585  Dom::setString(libsumo::VAR_LATALIGNMENT, personID, latAlignment);
586 }
587 
588 
589 void
590 Person::setSpeedFactor(const std::string& personID, double factor) {
591  Dom::setDouble(libsumo::VAR_SPEED_FACTOR, personID, factor);
592 }
593 
594 
595 void
596 Person::setActionStepLength(const std::string& personID, double actionStepLength, bool resetActionOffset) {
597  if (!resetActionOffset) {
598  actionStepLength *= -1;
599  }
600  Dom::setDouble(libsumo::VAR_ACTIONSTEPLENGTH, personID, actionStepLength);
601 }
602 
603 void
604 Person::remove(const std::string& personID, char reason) {
605  tcpip::Storage content;
607  content.writeUnsignedByte(reason);
608  Dom::set(libsumo::REMOVE, personID, &content);
609 }
610 
611 
612 void
613 Person::setColor(const std::string& personID, const libsumo::TraCIColor& color) {
614  Dom::setCol(libsumo::VAR_COLOR, personID, color);
615 }
616 
617 
619 
620 
621 }
622 
623 
624 /****************************************************************************/
#define LIBTRACI_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOMAIN)
Definition: Domain.h:38
#define LIBTRACI_PARAMETER_IMPLEMENTATION(CLASS, DOMAIN)
Definition: Domain.h:77
C++ TraCI client API implementation.
Definition: Person.h:33
static void writeTypedDouble(tcpip::Storage &content, double value)
static int readCompound(tcpip::Storage &ret, int expectedSize=-1, const std::string &error="")
Definition: StorageHelper.h:85
static int readTypedInt(tcpip::Storage &ret, const std::string &error="")
Definition: StorageHelper.h:50
static std::string readTypedString(tcpip::Storage &ret, const std::string &error="")
Definition: StorageHelper.h:71
static void writeTypedInt(tcpip::Storage &content, int value)
static std::vector< std::string > readTypedStringList(tcpip::Storage &ret, const std::string &error="")
Definition: StorageHelper.h:78
static void writeTypedStringList(tcpip::Storage &content, const std::vector< std::string > &value)
static void writeStage(tcpip::Storage &outputStorage, const libsumo::TraCIStage &stage)
static double readTypedDouble(tcpip::Storage &ret, const std::string &error="")
Definition: StorageHelper.h:64
double depart
pickup-time
Definition: TraCIDefs.h:625
double departPos
pickup position on the origin edge
Definition: TraCIDefs.h:621
double reservationTime
time when the reservation was made
Definition: TraCIDefs.h:627
double arrivalPos
drop-off position on the destination edge
Definition: TraCIDefs.h:623
std::vector< std::string > persons
The persons ids that are part of this reservation.
Definition: TraCIDefs.h:613
int state
the state of this reservation
Definition: TraCIDefs.h:629
std::string fromEdge
The origin edge id.
Definition: TraCIDefs.h:617
std::string group
The group id of this reservation.
Definition: TraCIDefs.h:615
std::string id
The id of the taxi reservation (usable for traci.vehicle.dispatchTaxi)
Definition: TraCIDefs.h:611
std::string toEdge
The destination edge id.
Definition: TraCIDefs.h:619
std::mutex & getMutex() const
Definition: Connection.h:76
static Connection & getActive()
Definition: Connection.h:57
static void setDouble(int var, const std::string &id, double value)
Definition: Domain.h:231
static libsumo::TraCIPosition getPos(int var, const std::string &id, tcpip::Storage *add=nullptr, const bool isGeo=false)
Definition: Domain.h:153
static void setCol(int var, const std::string &id, const libsumo::TraCIColor value)
Definition: Domain.h:252
static std::vector< std::string > getStringVector(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:177
static libsumo::TraCIColor getCol(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:187
static std::string getString(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:172
static int getInt(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:125
static libsumo::TraCIStage getTraCIStage(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:198
static void set(int var, const std::string &id, tcpip::Storage *add)
Definition: Domain.h:219
static libsumo::TraCIPosition getPos3D(int var, const std::string &id, tcpip::Storage *add=nullptr, const bool isGeo=false)
Definition: Domain.h:162
static double getDouble(int var, const std::string &id, tcpip::Storage *add=nullptr)
Definition: Domain.h:130
static tcpip::Storage & get(int var, const std::string &id, tcpip::Storage *add=nullptr, int expectedType=libsumo::TYPE_COMPOUND)
Definition: Domain.h:111
static void setInt(int var, const std::string &id, int value)
Definition: Domain.h:224
static void setString(int var, const std::string &id, const std::string &value)
Definition: Domain.h:238
virtual void writeString(const std::string &s)
Definition: storage.cpp:197
virtual void writeInt(int)
Definition: storage.cpp:321
virtual void writeDouble(double)
Definition: storage.cpp:354
virtual void writeStringList(const std::vector< std::string > &s)
Definition: storage.cpp:247
virtual void writeUnsignedByte(int)
Definition: storage.cpp:165
virtual void writeByte(int)
Definition: storage.cpp:140
virtual int readInt()
Definition: storage.cpp:311
TRACI_CONST int VAR_EDGES
TRACI_CONST int VAR_VEHICLECLASS
TRACI_CONST int TRACI_ID_LIST
TRACI_CONST int VAR_IMPATIENCE
TRACI_CONST int VAR_LATALIGNMENT
TRACI_CONST int VAR_TYPE
TRACI_CONST int VAR_MINGAP
TRACI_CONST int VAR_VEHICLE
TRACI_CONST int VAR_SHAPECLASS
TRACI_CONST int VAR_WAITING_TIME
TRACI_CONST int REPLACE_STAGE
TRACI_CONST int VAR_ROAD_ID
TRACI_CONST int VAR_TAXI_RESERVATIONS
TRACI_CONST int VAR_ACTIONSTEPLENGTH
TRACI_CONST int VAR_SPEED_FACTOR
TRACI_CONST int MOVE_TO_XY
TRACI_CONST int VAR_ANGLE
TRACI_CONST int VAR_TAU
TRACI_CONST int TYPE_COMPOUND
TRACI_CONST int VAR_BOARDING_DURATION
TRACI_CONST int VAR_STAGE
TRACI_CONST int VAR_MOVE_TO
TRACI_CONST int VAR_COLOR
TRACI_CONST int VAR_POSITION
TRACI_CONST int VAR_WIDTH
TRACI_CONST int VAR_PERSON_CAPACITY
TRACI_CONST int VAR_MAXSPEED
TRACI_CONST int STAGE_WAITING
TRACI_CONST int CMD_REROUTE_TRAVELTIME
TRACI_CONST int TYPE_STRINGLIST
TRACI_CONST int APPEND_STAGE
TRACI_CONST int TYPE_INTEGER
TRACI_CONST int VAR_SLOPE
TRACI_CONST int VAR_LENGTH
TRACI_CONST int VAR_MAXSPEED_LAT
TRACI_CONST int ID_COUNT
TRACI_CONST int VAR_LANEPOSITION
TRACI_CONST int REMOVE
TRACI_CONST int VAR_LANE_ID
TRACI_CONST int VAR_IMPERFECTION
TRACI_CONST int VAR_HEIGHT
TRACI_CONST int VAR_APPARENT_DECEL
TRACI_CONST int STAGE_WALKING
TRACI_CONST int VAR_POSITION3D
TRACI_CONST int REMOVE_STAGE
TRACI_CONST int VAR_SPEED
TRACI_CONST int VAR_DECEL
TRACI_CONST int VAR_MINGAP_LAT
TRACI_CONST int VAR_NEXT_EDGE
TRACI_CONST int TYPE_DOUBLE
TRACI_CONST int TYPE_BYTE
TRACI_CONST int VAR_EMERGENCY_DECEL
TRACI_CONST int STAGE_DRIVING
TRACI_CONST int VAR_EMISSIONCLASS
TRACI_CONST int VAR_ACCEL
TRACI_CONST int ADD
TRACI_CONST int VAR_STAGES_REMAINING
TRACI_CONST int SPLIT_TAXI_RESERVATIONS
TRACI_CONST int VAR_SPEED_DEVIATION
TRACI_CONST int TYPE_STRING
Domain< libsumo::CMD_GET_BUSSTOP_VARIABLE, libsumo::CMD_SET_BUSSTOP_VARIABLE > Dom
A 2D or 3D-position, for 2D positions z == INVALID_DOUBLE_VALUE.
Definition: TraCIDefs.h:178