Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
CommonXMLStructure.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2025 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// Structure for common XML Parsing
19/****************************************************************************/
20#include <config.h>
21
25
26#include "CommonXMLStructure.h"
27
28
29// ===========================================================================
30// method definitions
31// ===========================================================================
32
33// ---------------------------------------------------------------------------
34// CommonXMLStructure::PlanParameters - methods
35// ---------------------------------------------------------------------------
36
38
39
41 const SUMOSAXAttributes& attrs, bool& parsedOk) {
42 if (sumoBaseObject->getParentSumoBaseObject() != nullptr) {
43 // get plan parent ID (first check if exist!)
44 const auto planParentID = sumoBaseObject->getParentSumoBaseObject()->hasStringAttribute(SUMO_ATTR_ID) ?
45 sumoBaseObject->getParentSumoBaseObject()->getStringAttribute(SUMO_ATTR_ID).c_str() : "";
46 // edges
47 fromEdge = attrs.getOpt<std::string>(SUMO_ATTR_FROM, planParentID, parsedOk, "");
48 toEdge = attrs.getOpt<std::string>(SUMO_ATTR_TO, planParentID, parsedOk, "");
49 if (toEdge.empty()) {
50 toEdge = attrs.getOpt<std::string>(SUMO_ATTR_EDGE, planParentID, parsedOk, "");
51 }
52 consecutiveEdges = attrs.getOpt<std::vector<std::string> >(SUMO_ATTR_EDGES, planParentID, parsedOk);
53 // junctions
54 fromJunction = attrs.getOpt<std::string>(SUMO_ATTR_FROM_JUNCTION, planParentID, parsedOk, "");
55 toJunction = attrs.getOpt<std::string>(SUMO_ATTR_TO_JUNCTION, planParentID, parsedOk, "");
56 // TAZs
57 fromTAZ = attrs.getOpt<std::string>(SUMO_ATTR_FROM_TAZ, planParentID, parsedOk, "");
58 toTAZ = attrs.getOpt<std::string>(SUMO_ATTR_TO_TAZ, planParentID, parsedOk, "");
59 // bus stops
60 fromBusStop = attrs.getOpt<std::string>(GNE_ATTR_FROM_BUSSTOP, planParentID, parsedOk, "");
61 toBusStop = attrs.getOpt<std::string>(SUMO_ATTR_BUS_STOP, planParentID, parsedOk, "");
62 // train stops
63 fromTrainStop = attrs.getOpt<std::string>(GNE_ATTR_FROM_TRAINSTOP, planParentID, parsedOk, "");
64 toTrainStop = attrs.getOpt<std::string>(SUMO_ATTR_TRAIN_STOP, planParentID, parsedOk, "");
65 // container stops
66 fromContainerStop = attrs.getOpt<std::string>(GNE_ATTR_FROM_CONTAINERSTOP, planParentID, parsedOk, "");
67 toContainerStop = attrs.getOpt<std::string>(SUMO_ATTR_CONTAINER_STOP, planParentID, parsedOk, "");
68 // charging stations
69 fromChargingStation = attrs.getOpt<std::string>(GNE_ATTR_FROM_CHARGINGSTATION, planParentID, parsedOk, "");
70 toChargingStation = attrs.getOpt<std::string>(SUMO_ATTR_CHARGING_STATION, planParentID, parsedOk, "");
71 // parking areas
72 fromParkingArea = attrs.getOpt<std::string>(GNE_ATTR_FROM_PARKINGAREA, planParentID, parsedOk, "");
73 toParkingArea = attrs.getOpt<std::string>(SUMO_ATTR_PARKING_AREA, planParentID, parsedOk, "");
74 // routes
75 fromRoute = attrs.getOpt<std::string>(GNE_ATTR_FROM_ROUTE, planParentID, parsedOk, "");
76 toRoute = attrs.getOpt<std::string>(SUMO_ATTR_ROUTE, planParentID, parsedOk, "");
77 // update from attributes
78 updateFromAttributes(sumoBaseObject);
79 }
80}
81
82
83void
85 fromJunction.clear();
86 toJunction.clear();
87 fromEdge.clear();
88 toEdge.clear();
89 fromTAZ.clear();
90 toTAZ.clear();
91 fromBusStop.clear();
92 toBusStop.clear();
93 fromTrainStop.clear();
94 toTrainStop.clear();
95 fromContainerStop.clear();
96 toContainerStop.clear();
97 fromChargingStation.clear();
98 toChargingStation.clear();
99 fromParkingArea.clear();
100 toParkingArea.clear();
101 consecutiveEdges.clear();
102 fromRoute.clear();
103 toRoute.clear();
104}
105
106
107bool
109 if (fromEdge.empty()) {
110 return false;
111 } else {
112 return getNumberOfDefinedParameters() == 1;
113 }
114}
115
116
117int
119 return (int)consecutiveEdges.size() +
120 (fromJunction.empty() ? 0 : 1) +
121 (toJunction.empty() ? 0 : 1) +
122 (fromEdge.empty() ? 0 : 1) +
123 (toEdge.empty() ? 0 : 1) +
124 (fromTAZ.empty() ? 0 : 1) +
125 (toTAZ.empty() ? 0 : 1) +
126 (fromBusStop.empty() ? 0 : 1) +
127 (toBusStop.empty() ? 0 : 1) +
128 (fromTrainStop.empty() ? 0 : 1) +
129 (toTrainStop.empty() ? 0 : 1) +
130 (fromContainerStop.empty() ? 0 : 1) +
131 (toContainerStop.empty() ? 0 : 1) +
132 (fromChargingStation.empty() ? 0 : 1) +
133 (toChargingStation.empty() ? 0 : 1) +
134 (fromParkingArea.empty() ? 0 : 1) +
135 (toParkingArea.empty() ? 0 : 1) +
136 (fromRoute.empty() ? 0 : 1) +
137 (toRoute.empty() ? 0 : 1);
138}
139
140
141
144 if (isSingleEdgePlan()) {
146 } else if (consecutiveEdges.size() > 0) {
147 return GNE_TAG_WALK_EDGES;
148 } else if (!toRoute.empty()) {
149 return GNE_TAG_WALK_ROUTE;
150 } else if (!fromEdge.empty()) {
151 if (!toEdge.empty()) {
153 } else if (!toTAZ.empty()) {
155 } else if (!toJunction.empty()) {
157 } else if (!toBusStop.empty()) {
159 } else if (!toTrainStop.empty()) {
161 } else if (!toContainerStop.empty()) {
163 } else if (!toChargingStation.empty()) {
165 } else if (!toParkingArea.empty()) {
167 } else {
168 return SUMO_TAG_NOTHING;
169 }
170 } else if (!fromTAZ.empty()) {
171 if (!toEdge.empty()) {
173 } else if (!toTAZ.empty()) {
175 } else if (!toJunction.empty()) {
177 } else if (!toBusStop.empty()) {
179 } else if (!toTrainStop.empty()) {
181 } else if (!toContainerStop.empty()) {
183 } else if (!toChargingStation.empty()) {
185 } else if (!toParkingArea.empty()) {
187 } else {
188 return SUMO_TAG_NOTHING;
189 }
190 } else if (!fromJunction.empty()) {
191 if (!toEdge.empty()) {
193 } else if (!toTAZ.empty()) {
195 } else if (!toJunction.empty()) {
197 } else if (!toBusStop.empty()) {
199 } else if (!toTrainStop.empty()) {
201 } else if (!toContainerStop.empty()) {
203 } else if (!toChargingStation.empty()) {
205 } else if (!toParkingArea.empty()) {
207 } else {
208 return SUMO_TAG_NOTHING;
209 }
210 } else if (!fromBusStop.empty()) {
211 if (!toEdge.empty()) {
213 } else if (!toTAZ.empty()) {
215 } else if (!toJunction.empty()) {
217 } else if (!toBusStop.empty()) {
219 } else if (!toTrainStop.empty()) {
221 } else if (!toContainerStop.empty()) {
223 } else if (!toChargingStation.empty()) {
225 } else if (!toParkingArea.empty()) {
227 } else {
228 return SUMO_TAG_NOTHING;
229 }
230 } else if (!fromTrainStop.empty()) {
231 if (!toEdge.empty()) {
233 } else if (!toTAZ.empty()) {
235 } else if (!toJunction.empty()) {
237 } else if (!toBusStop.empty()) {
239 } else if (!toTrainStop.empty()) {
241 } else if (!toContainerStop.empty()) {
243 } else if (!toChargingStation.empty()) {
245 } else if (!toParkingArea.empty()) {
247 } else {
248 return SUMO_TAG_NOTHING;
249 }
250 } else if (!fromContainerStop.empty()) {
251 if (!toEdge.empty()) {
253 } else if (!toTAZ.empty()) {
255 } else if (!toJunction.empty()) {
257 } else if (!toBusStop.empty()) {
259 } else if (!toTrainStop.empty()) {
261 } else if (!toContainerStop.empty()) {
263 } else if (!toChargingStation.empty()) {
265 } else if (!toParkingArea.empty()) {
267 } else {
268 return SUMO_TAG_NOTHING;
269 }
270 } else if (!fromChargingStation.empty()) {
271 if (!toEdge.empty()) {
273 } else if (!toTAZ.empty()) {
275 } else if (!toJunction.empty()) {
277 } else if (!toBusStop.empty()) {
279 } else if (!toTrainStop.empty()) {
281 } else if (!toContainerStop.empty()) {
283 } else if (!toChargingStation.empty()) {
285 } else if (!toParkingArea.empty()) {
287 } else {
288 return SUMO_TAG_NOTHING;
289 }
290 } else if (!fromParkingArea.empty()) {
291 if (!toEdge.empty()) {
293 } else if (!toTAZ.empty()) {
295 } else if (!toJunction.empty()) {
297 } else if (!toBusStop.empty()) {
299 } else if (!toTrainStop.empty()) {
301 } else if (!toContainerStop.empty()) {
303 } else if (!toChargingStation.empty()) {
305 } else if (!toParkingArea.empty()) {
307 } else {
308 return SUMO_TAG_NOTHING;
309 }
310 } else {
311 return SUMO_TAG_NOTHING;
312 }
313}
314
315
318 if (isSingleEdgePlan()) {
320 } else if (!fromEdge.empty()) {
321 if (!toEdge.empty()) {
323 } else if (!toTAZ.empty()) {
325 } else if (!toJunction.empty()) {
327 } else if (!toBusStop.empty()) {
329 } else if (!toTrainStop.empty()) {
331 } else if (!toContainerStop.empty()) {
333 } else if (!toChargingStation.empty()) {
335 } else if (!toParkingArea.empty()) {
337 } else {
338 return SUMO_TAG_NOTHING;
339 }
340 } else if (!fromTAZ.empty()) {
341 if (!toEdge.empty()) {
343 } else if (!toTAZ.empty()) {
345 } else if (!toJunction.empty()) {
347 } else if (!toBusStop.empty()) {
349 } else if (!toTrainStop.empty()) {
351 } else if (!toContainerStop.empty()) {
353 } else if (!toChargingStation.empty()) {
355 } else if (!toParkingArea.empty()) {
357 } else {
358 return SUMO_TAG_NOTHING;
359 }
360 } else if (!fromJunction.empty()) {
361 if (!toEdge.empty()) {
363 } else if (!toTAZ.empty()) {
365 } else if (!toJunction.empty()) {
367 } else if (!toBusStop.empty()) {
369 } else if (!toTrainStop.empty()) {
371 } else if (!toContainerStop.empty()) {
373 } else if (!toChargingStation.empty()) {
375 } else if (!toParkingArea.empty()) {
377 } else {
378 return SUMO_TAG_NOTHING;
379 }
380 } else if (!fromBusStop.empty()) {
381 if (!toEdge.empty()) {
383 } else if (!toTAZ.empty()) {
385 } else if (!toJunction.empty()) {
387 } else if (!toBusStop.empty()) {
389 } else if (!toTrainStop.empty()) {
391 } else if (!toContainerStop.empty()) {
393 } else if (!toChargingStation.empty()) {
395 } else if (!toParkingArea.empty()) {
397 } else {
398 return SUMO_TAG_NOTHING;
399 }
400 } else if (!fromTrainStop.empty()) {
401 if (!toEdge.empty()) {
403 } else if (!toTAZ.empty()) {
405 } else if (!toJunction.empty()) {
407 } else if (!toBusStop.empty()) {
409 } else if (!toTrainStop.empty()) {
411 } else if (!toContainerStop.empty()) {
413 } else if (!toChargingStation.empty()) {
415 } else if (!toParkingArea.empty()) {
417 } else {
418 return SUMO_TAG_NOTHING;
419 }
420 } else if (!fromContainerStop.empty()) {
421 if (!toEdge.empty()) {
423 } else if (!toTAZ.empty()) {
425 } else if (!toJunction.empty()) {
427 } else if (!toBusStop.empty()) {
429 } else if (!toTrainStop.empty()) {
431 } else if (!toContainerStop.empty()) {
433 } else if (!toChargingStation.empty()) {
435 } else if (!toParkingArea.empty()) {
437 } else {
438 return SUMO_TAG_NOTHING;
439 }
440 } else if (!fromChargingStation.empty()) {
441 if (!toEdge.empty()) {
443 } else if (!toTAZ.empty()) {
445 } else if (!toJunction.empty()) {
447 } else if (!toBusStop.empty()) {
449 } else if (!toTrainStop.empty()) {
451 } else if (!toContainerStop.empty()) {
453 } else if (!toChargingStation.empty()) {
455 } else if (!toParkingArea.empty()) {
457 } else {
458 return SUMO_TAG_NOTHING;
459 }
460 } else if (!fromParkingArea.empty()) {
461 if (!toEdge.empty()) {
463 } else if (!toTAZ.empty()) {
465 } else if (!toJunction.empty()) {
467 } else if (!toBusStop.empty()) {
469 } else if (!toTrainStop.empty()) {
471 } else if (!toContainerStop.empty()) {
473 } else if (!toChargingStation.empty()) {
475 } else if (!toParkingArea.empty()) {
477 } else {
478 return SUMO_TAG_NOTHING;
479 }
480 } else {
481 return SUMO_TAG_NOTHING;
482 }
483}
484
485
488 if (isSingleEdgePlan()) {
490 } else if (!fromEdge.empty()) {
491 if (!toEdge.empty()) {
493 } else if (!toTAZ.empty()) {
495 } else if (!toJunction.empty()) {
497 } else if (!toBusStop.empty()) {
499 } else if (!toTrainStop.empty()) {
501 } else if (!toContainerStop.empty()) {
503 } else if (!toChargingStation.empty()) {
505 } else if (!toParkingArea.empty()) {
507 } else {
508 return SUMO_TAG_NOTHING;
509 }
510 } else if (!fromTAZ.empty()) {
511 if (!toEdge.empty()) {
513 } else if (!toTAZ.empty()) {
515 } else if (!toJunction.empty()) {
517 } else if (!toBusStop.empty()) {
519 } else if (!toTrainStop.empty()) {
521 } else if (!toContainerStop.empty()) {
523 } else if (!toChargingStation.empty()) {
525 } else if (!toParkingArea.empty()) {
527 } else {
528 return SUMO_TAG_NOTHING;
529 }
530 } else if (!fromJunction.empty()) {
531 if (!toEdge.empty()) {
533 } else if (!toTAZ.empty()) {
535 } else if (!toJunction.empty()) {
537 } else if (!toBusStop.empty()) {
539 } else if (!toTrainStop.empty()) {
541 } else if (!toContainerStop.empty()) {
543 } else if (!toChargingStation.empty()) {
545 } else if (!toParkingArea.empty()) {
547 } else {
548 return SUMO_TAG_NOTHING;
549 }
550 } else if (!fromBusStop.empty()) {
551 if (!toEdge.empty()) {
553 } else if (!toTAZ.empty()) {
555 } else if (!toJunction.empty()) {
557 } else if (!toBusStop.empty()) {
559 } else if (!toTrainStop.empty()) {
561 } else if (!toContainerStop.empty()) {
563 } else if (!toChargingStation.empty()) {
565 } else if (!toParkingArea.empty()) {
567 } else {
568 return SUMO_TAG_NOTHING;
569 }
570 } else if (!fromTrainStop.empty()) {
571 if (!toEdge.empty()) {
573 } else if (!toTAZ.empty()) {
575 } else if (!toJunction.empty()) {
577 } else if (!toBusStop.empty()) {
579 } else if (!toTrainStop.empty()) {
581 } else if (!toContainerStop.empty()) {
583 } else if (!toChargingStation.empty()) {
585 } else if (!toParkingArea.empty()) {
587 } else {
588 return SUMO_TAG_NOTHING;
589 }
590 } else if (!fromContainerStop.empty()) {
591 if (!toEdge.empty()) {
593 } else if (!toTAZ.empty()) {
595 } else if (!toJunction.empty()) {
597 } else if (!toBusStop.empty()) {
599 } else if (!toTrainStop.empty()) {
601 } else if (!toContainerStop.empty()) {
603 } else if (!toChargingStation.empty()) {
605 } else if (!toParkingArea.empty()) {
607 } else {
608 return SUMO_TAG_NOTHING;
609 }
610 } else if (!fromChargingStation.empty()) {
611 if (!toEdge.empty()) {
613 } else if (!toTAZ.empty()) {
615 } else if (!toJunction.empty()) {
617 } else if (!toBusStop.empty()) {
619 } else if (!toTrainStop.empty()) {
621 } else if (!toContainerStop.empty()) {
623 } else if (!toChargingStation.empty()) {
625 } else if (!toParkingArea.empty()) {
627 } else {
628 return SUMO_TAG_NOTHING;
629 }
630 } else if (!fromParkingArea.empty()) {
631 if (!toEdge.empty()) {
633 } else if (!toTAZ.empty()) {
635 } else if (!toJunction.empty()) {
637 } else if (!toBusStop.empty()) {
639 } else if (!toTrainStop.empty()) {
641 } else if (!toContainerStop.empty()) {
643 } else if (!toChargingStation.empty()) {
645 } else if (!toParkingArea.empty()) {
647 } else {
648 return SUMO_TAG_NOTHING;
649 }
650 } else {
651 return SUMO_TAG_NOTHING;
652 }
653}
654
655
658 if (isSingleEdgePlan()) {
660 } else if (!fromEdge.empty()) {
661 if (!toEdge.empty()) {
663 } else if (!toTAZ.empty()) {
665 } else if (!toJunction.empty()) {
667 } else if (!toBusStop.empty()) {
669 } else if (!toTrainStop.empty()) {
671 } else if (!toContainerStop.empty()) {
673 } else if (!toChargingStation.empty()) {
675 } else if (!toParkingArea.empty()) {
677 } else {
678 return SUMO_TAG_NOTHING;
679 }
680 } else if (!fromTAZ.empty()) {
681 if (!toEdge.empty()) {
683 } else if (!toTAZ.empty()) {
685 } else if (!toJunction.empty()) {
687 } else if (!toBusStop.empty()) {
689 } else if (!toTrainStop.empty()) {
691 } else if (!toContainerStop.empty()) {
693 } else if (!toChargingStation.empty()) {
695 } else if (!toParkingArea.empty()) {
697 } else {
698 return SUMO_TAG_NOTHING;
699 }
700 } else if (!fromJunction.empty()) {
701 if (!toEdge.empty()) {
703 } else if (!toTAZ.empty()) {
705 } else if (!toJunction.empty()) {
707 } else if (!toBusStop.empty()) {
709 } else if (!toTrainStop.empty()) {
711 } else if (!toContainerStop.empty()) {
713 } else if (!toChargingStation.empty()) {
715 } else if (!toParkingArea.empty()) {
717 } else {
718 return SUMO_TAG_NOTHING;
719 }
720 } else if (!fromBusStop.empty()) {
721 if (!toEdge.empty()) {
723 } else if (!toTAZ.empty()) {
725 } else if (!toJunction.empty()) {
727 } else if (!toBusStop.empty()) {
729 } else if (!toTrainStop.empty()) {
731 } else if (!toContainerStop.empty()) {
733 } else if (!toChargingStation.empty()) {
735 } else if (!toParkingArea.empty()) {
737 } else {
738 return SUMO_TAG_NOTHING;
739 }
740 } else if (!fromTrainStop.empty()) {
741 if (!toEdge.empty()) {
743 } else if (!toTAZ.empty()) {
745 } else if (!toJunction.empty()) {
747 } else if (!toBusStop.empty()) {
749 } else if (!toTrainStop.empty()) {
751 } else if (!toContainerStop.empty()) {
753 } else if (!toChargingStation.empty()) {
755 } else if (!toParkingArea.empty()) {
757 } else {
758 return SUMO_TAG_NOTHING;
759 }
760 } else if (!fromContainerStop.empty()) {
761 if (!toEdge.empty()) {
763 } else if (!toTAZ.empty()) {
765 } else if (!toJunction.empty()) {
767 } else if (!toBusStop.empty()) {
769 } else if (!toTrainStop.empty()) {
771 } else if (!toContainerStop.empty()) {
773 } else if (!toChargingStation.empty()) {
775 } else if (!toParkingArea.empty()) {
777 } else {
778 return SUMO_TAG_NOTHING;
779 }
780 } else if (!fromChargingStation.empty()) {
781 if (!toEdge.empty()) {
783 } else if (!toTAZ.empty()) {
785 } else if (!toJunction.empty()) {
787 } else if (!toBusStop.empty()) {
789 } else if (!toTrainStop.empty()) {
791 } else if (!toContainerStop.empty()) {
793 } else if (!toChargingStation.empty()) {
795 } else if (!toParkingArea.empty()) {
797 } else {
798 return SUMO_TAG_NOTHING;
799 }
800 } else if (!fromParkingArea.empty()) {
801 if (!toEdge.empty()) {
803 } else if (!toTAZ.empty()) {
805 } else if (!toJunction.empty()) {
807 } else if (!toBusStop.empty()) {
809 } else if (!toTrainStop.empty()) {
811 } else if (!toContainerStop.empty()) {
813 } else if (!toChargingStation.empty()) {
815 } else if (!toParkingArea.empty()) {
817 } else {
818 return SUMO_TAG_NOTHING;
819 }
820 } else {
821 return SUMO_TAG_NOTHING;
822 }
823}
824
825
828 if (isSingleEdgePlan()) {
830 } else if (consecutiveEdges.size() > 0) {
832 } else if (!fromEdge.empty()) {
833 if (!toEdge.empty()) {
835 } else if (!toTAZ.empty()) {
837 } else if (!toJunction.empty()) {
839 } else if (!toBusStop.empty()) {
841 } else if (!toTrainStop.empty()) {
843 } else if (!toContainerStop.empty()) {
845 } else if (!toChargingStation.empty()) {
847 } else if (!toParkingArea.empty()) {
849 } else {
850 return SUMO_TAG_NOTHING;
851 }
852 } else if (!fromTAZ.empty()) {
853 if (!toEdge.empty()) {
855 } else if (!toTAZ.empty()) {
857 } else if (!toJunction.empty()) {
859 } else if (!toBusStop.empty()) {
861 } else if (!toTrainStop.empty()) {
863 } else if (!toContainerStop.empty()) {
865 } else if (!toChargingStation.empty()) {
867 } else if (!toParkingArea.empty()) {
869 } else {
870 return SUMO_TAG_NOTHING;
871 }
872 } else if (!fromJunction.empty()) {
873 if (!toEdge.empty()) {
875 } else if (!toTAZ.empty()) {
877 } else if (!toJunction.empty()) {
879 } else if (!toBusStop.empty()) {
881 } else if (!toTrainStop.empty()) {
883 } else if (!toContainerStop.empty()) {
885 } else if (!toChargingStation.empty()) {
887 } else if (!toParkingArea.empty()) {
889 } else {
890 return SUMO_TAG_NOTHING;
891 }
892 } else if (!fromBusStop.empty()) {
893 if (!toEdge.empty()) {
895 } else if (!toTAZ.empty()) {
897 } else if (!toJunction.empty()) {
899 } else if (!toBusStop.empty()) {
901 } else if (!toTrainStop.empty()) {
903 } else if (!toContainerStop.empty()) {
905 } else if (!toChargingStation.empty()) {
907 } else if (!toParkingArea.empty()) {
909 } else {
910 return SUMO_TAG_NOTHING;
911 }
912 } else if (!fromTrainStop.empty()) {
913 if (!toEdge.empty()) {
915 } else if (!toTAZ.empty()) {
917 } else if (!toJunction.empty()) {
919 } else if (!toBusStop.empty()) {
921 } else if (!toTrainStop.empty()) {
923 } else if (!toContainerStop.empty()) {
925 } else if (!toChargingStation.empty()) {
927 } else if (!toParkingArea.empty()) {
929 } else {
930 return SUMO_TAG_NOTHING;
931 }
932 } else if (!fromContainerStop.empty()) {
933 if (!toEdge.empty()) {
935 } else if (!toTAZ.empty()) {
937 } else if (!toJunction.empty()) {
939 } else if (!toBusStop.empty()) {
941 } else if (!toTrainStop.empty()) {
943 } else if (!toContainerStop.empty()) {
945 } else if (!toChargingStation.empty()) {
947 } else if (!toParkingArea.empty()) {
949 } else {
950 return SUMO_TAG_NOTHING;
951 }
952 } else if (!fromChargingStation.empty()) {
953 if (!toEdge.empty()) {
955 } else if (!toTAZ.empty()) {
957 } else if (!toJunction.empty()) {
959 } else if (!toBusStop.empty()) {
961 } else if (!toTrainStop.empty()) {
963 } else if (!toContainerStop.empty()) {
965 } else if (!toChargingStation.empty()) {
967 } else if (!toParkingArea.empty()) {
969 } else {
970 return SUMO_TAG_NOTHING;
971 }
972 } else if (!fromParkingArea.empty()) {
973 if (!toEdge.empty()) {
975 } else if (!toTAZ.empty()) {
977 } else if (!toJunction.empty()) {
979 } else if (!toBusStop.empty()) {
981 } else if (!toTrainStop.empty()) {
983 } else if (!toContainerStop.empty()) {
985 } else if (!toChargingStation.empty()) {
987 } else if (!toParkingArea.empty()) {
989 } else {
990 return SUMO_TAG_NOTHING;
991 }
992 } else {
993 return SUMO_TAG_NOTHING;
994 }
995}
996
997
1000 if (!toEdge.empty()) {
1002 } else if (!toBusStop.empty()) {
1004 } else if (!toTrainStop.empty()) {
1006 } else if (!toContainerStop.empty()) {
1008 } else if (!toChargingStation.empty()) {
1010 } else if (!toParkingArea.empty()) {
1012 } else {
1013 return SUMO_TAG_NOTHING;
1014 }
1015}
1016
1017
1020 if (!toEdge.empty()) {
1022 } else if (!toBusStop.empty()) {
1024 } else if (!toTrainStop.empty()) {
1026 } else if (!toContainerStop.empty()) {
1028 } else if (!toChargingStation.empty()) {
1030 } else if (!toParkingArea.empty()) {
1032 } else {
1033 return SUMO_TAG_NOTHING;
1034 }
1035}
1036
1037
1038
1041 // first check if object exist
1042 if (sumoBaseObject == nullptr) {
1043 return nullptr;
1044 }
1045 // check if object has parent
1046 const CommonXMLStructure::SumoBaseObject* parentObject = sumoBaseObject->getParentSumoBaseObject();
1047 if (parentObject == nullptr) {
1048 return nullptr;
1049 }
1050 // check number of children
1051 if (parentObject->getSumoBaseObjectChildren().size() < 2) {
1052 return nullptr;
1053 }
1054 // search position of the given plan obj in the parent children
1055 const auto objIterator = std::find(parentObject->getSumoBaseObjectChildren().begin(), parentObject->getSumoBaseObjectChildren().end(), sumoBaseObject);
1056 // if obj is the first plan of person/container parent, then return null. If not, return previous object
1057 if (objIterator == parentObject->getSumoBaseObjectChildren().begin()) {
1058 return nullptr;
1059 } else {
1060 return *(objIterator - 1);
1061 }
1062}
1063
1064
1065void
1067 // check if previous plan object was defined but not the from
1068 const auto previousPlanObj = getPreviousPlanObj(sumoBaseObject);
1069 if (previousPlanObj) {
1070 // ge previous plan parameters
1071 const auto previousPlanParameters = previousPlanObj->getPlanParameters();
1072 if (!previousPlanParameters.toEdge.empty()) {
1073 // edge (to)
1074 resetPreviousFromAttributes(previousPlanObj, "edge", previousPlanParameters.toEdge);
1075 fromEdge = previousPlanParameters.toEdge;
1076 } else if (!previousPlanParameters.consecutiveEdges.empty()) {
1077 // consecutive edge
1078 resetPreviousFromAttributes(previousPlanObj, "consecutive edge", previousPlanParameters.consecutiveEdges.back());
1079 fromEdge = previousPlanParameters.consecutiveEdges.back();
1080 } else if (!previousPlanParameters.toRoute.empty()) {
1081 // route
1082 resetPreviousFromAttributes(previousPlanObj, "route edge", previousPlanParameters.toRoute);
1083 fromRoute = previousPlanParameters.toRoute;
1084 } else if (!previousPlanParameters.toJunction.empty()) {
1085 // junction
1086 resetPreviousFromAttributes(previousPlanObj, "junction", previousPlanParameters.toJunction);
1087 fromJunction = previousPlanParameters.toJunction;
1088 } else if (!previousPlanParameters.toTAZ.empty()) {
1089 // TAZ
1090 resetPreviousFromAttributes(previousPlanObj, "TAZ", previousPlanParameters.toTAZ);
1091 fromTAZ = previousPlanParameters.toTAZ;
1092 } else if (!previousPlanParameters.toBusStop.empty()) {
1093 // busStop
1094 resetPreviousFromAttributes(previousPlanObj, "bus stop", previousPlanParameters.toBusStop);
1095 fromBusStop = previousPlanParameters.toBusStop;
1096 } else if (!previousPlanParameters.toTrainStop.empty()) {
1097 // trainStop
1098 resetPreviousFromAttributes(previousPlanObj, "train stop", previousPlanParameters.toTrainStop);
1099 fromTrainStop = previousPlanParameters.toTrainStop;
1100 } else if (!previousPlanParameters.toContainerStop.empty()) {
1101 // containerStop
1102 resetPreviousFromAttributes(previousPlanObj, "container stop", previousPlanParameters.toContainerStop);
1103 fromContainerStop = previousPlanParameters.toContainerStop;
1104 } else if (!previousPlanParameters.toChargingStation.empty()) {
1105 // chargingStation
1106 resetPreviousFromAttributes(previousPlanObj, "charging station", previousPlanParameters.toChargingStation);
1107 fromChargingStation = previousPlanParameters.toChargingStation;
1108 } else if (!previousPlanParameters.toParkingArea.empty()) {
1109 // parkingArea
1110 resetPreviousFromAttributes(previousPlanObj, "parking area", previousPlanParameters.toParkingArea);
1111 fromParkingArea = previousPlanParameters.toParkingArea;
1112 }
1113 }
1114}
1115
1116
1117void
1119 const std::string& newType, const std::string& newId) const {
1120 if (!fromEdge.empty()) {
1121 writeIgnoringMessage(previousPlanObj, "edge", fromEdge, newType, newId);
1122 }
1123 if (!fromJunction.empty()) {
1124 writeIgnoringMessage(previousPlanObj, "junction", fromJunction, newType, newId);
1125 }
1126 if (!fromTAZ.empty()) {
1127 writeIgnoringMessage(previousPlanObj, "TAZ", fromTAZ, newType, newId);
1128 }
1129 if (!fromBusStop.empty()) {
1130 writeIgnoringMessage(previousPlanObj, "bus stop", fromBusStop, newType, newId);
1131 }
1132 if (!fromTrainStop.empty()) {
1133 writeIgnoringMessage(previousPlanObj, "train stop", fromTrainStop, newType, newId);
1134 }
1135 if (!fromContainerStop.empty()) {
1136 writeIgnoringMessage(previousPlanObj, "container stop", fromContainerStop, newType, newId);
1137 }
1138 if (!fromChargingStation.empty()) {
1139 writeIgnoringMessage(previousPlanObj, "charging station", fromChargingStation, newType, newId);
1140 }
1141 if (!fromParkingArea.empty()) {
1142 writeIgnoringMessage(previousPlanObj, "parking area", fromParkingArea, newType, newId);
1143 }
1144}
1145
1146
1147void
1149 const std::string& oldType, const std::string& oldId, const std::string& newType, const std::string& newId) const {
1150 WRITE_WARNING(TLF("Ignoring from % '%' used in % '%' and using instead the previous end element % '%'",
1151 oldType, oldId,
1152 toString(previousPlanObj->getParentSumoBaseObject()->getTag()),
1154 newType, newId));
1155}
1156
1157// ---------------------------------------------------------------------------
1158// CommonXMLStructure::SumoBaseObject - methods
1159// ---------------------------------------------------------------------------
1160
1162 mySumoBaseObjectParent(parent),
1163 myVehicleTypeParameter("") {
1164 // add this SumoBaseObject into parent children
1167 }
1168}
1169
1170
1172 // remove this SumoBaseObject from parent children
1173 if (mySumoBaseObjectParent) {
1174 mySumoBaseObjectParent->removeSumoBaseObjectChild(this);
1175 }
1176 // delete all SumoBaseObjectChildrens
1177 while (mySumoBaseObjectChildren.size() > 0) {
1178 delete mySumoBaseObjectChildren.back();
1179 }
1180}
1181
1182
1183void
1185 // reset tag
1186 myTag = SUMO_TAG_NOTHING;
1187 // reset vClass
1188 myVClass = SVC_IGNORING;
1189 // clear containers
1190 myStringAttributes.clear();
1191 myIntAttributes.clear();
1192 myDoubleAttributes.clear();
1193 myBoolAttributes.clear();
1194 myPositionAttributes.clear();
1195 myTimeAttributes.clear();
1196 myColorAttributes.clear();
1197 myStringListAttributes.clear();
1198 myDoubleListAttributes.clear();
1199 myPositionVectorAttributes.clear();
1200 myParentIDs.clear();
1201 myParameters.clear();
1202 mySumoBaseObjectChildren.clear();
1203 // reset flags
1204 myDefinedVehicleTypeParameter = false;
1205 myDefinedVehicleParameter = false;
1206 myDefinedStopParameter = false;
1207 // delete all SumoBaseObjectChildrens
1208 while (mySumoBaseObjectChildren.size() > 0) {
1209 delete mySumoBaseObjectChildren.back();
1210 }
1211}
1212
1213
1214void
1216 myTag = tag;
1217}
1218
1219
1220void
1222 myWasCreated = true;
1223}
1224
1225
1228 return myTag;
1229}
1230
1231
1232bool
1234 return myWasCreated;
1235}
1236
1237
1240 return mySumoBaseObjectParent;
1241}
1242
1243
1244std::map<std::string, std::string>
1246 std::map<std::string, std::string> result;
1247 for (const auto& attr : myStringAttributes) {
1248 result[toString(attr.first)] = attr.second;
1249 }
1250 for (const auto& attr : myIntAttributes) {
1251 result[toString(attr.first)] = toString(attr.second);
1252 }
1253 for (const auto& attr : myDoubleAttributes) {
1254 result[toString(attr.first)] = toString(attr.second);
1255 }
1256 for (const auto& attr : myBoolAttributes) {
1257 result[toString(attr.first)] = toString(attr.second);
1258 }
1259 for (const auto& attr : myPositionAttributes) {
1260 result[toString(attr.first)] = toString(attr.second);
1261 }
1262 for (const auto& attr : myTimeAttributes) {
1263 result[toString(attr.first)] = time2string(attr.second);
1264 }
1265 for (const auto& attr : myColorAttributes) {
1266 result[toString(attr.first)] = toString(attr.second);
1267 }
1268 for (const auto& attr : myStringListAttributes) {
1269 result[toString(attr.first)] = toString(attr.second);
1270 }
1271 for (const auto& attr : myDoubleListAttributes) {
1272 result[toString(attr.first)] = toString(attr.second);
1273 }
1274 for (const auto& attr : myPositionVectorAttributes) {
1275 result[toString(attr.first)] = toString(attr.second);
1276 }
1277 return result;
1278}
1279
1280
1281const std::string&
1283 if (hasStringAttribute(attr)) {
1284 return myStringAttributes.at(attr);
1285 } else {
1286 handleAttributeError(attr, "string");
1287 throw ProcessError();
1288 }
1289}
1290
1291
1292int
1294 if (hasIntAttribute(attr)) {
1295 return myIntAttributes.at(attr);
1296 } else {
1297 handleAttributeError(attr, "int");
1298 throw ProcessError();
1299 }
1300}
1301
1302
1303double
1305 if (hasDoubleAttribute(attr)) {
1306 return myDoubleAttributes.at(attr);
1307 } else {
1308 handleAttributeError(attr, "double");
1309 throw ProcessError();
1310 }
1311}
1312
1313
1314bool
1316 if (hasBoolAttribute(attr)) {
1317 return myBoolAttributes.at(attr);
1318 } else {
1319 handleAttributeError(attr, "bool");
1320 throw ProcessError();
1321 }
1322}
1323
1324
1325const Position&
1327 if (hasPositionAttribute(attr)) {
1328 return myPositionAttributes.at(attr);
1329 } else {
1330 handleAttributeError(attr, "position");
1331 throw ProcessError();
1332 }
1333}
1334
1335
1338 if (hasTimeAttribute(attr)) {
1339 return myTimeAttributes.at(attr);
1340 } else {
1341 handleAttributeError(attr, "time");
1342 throw ProcessError();
1343 }
1344}
1345
1346
1350 if (hasTimeAttribute(attr)) {
1351 return myTimeAttributes.at(attr);
1352 } else {
1353 // try 'freq' as alias for 'period'
1354 attr = SUMO_ATTR_FREQUENCY;
1355 if (hasTimeAttribute(attr)) {
1356 return myTimeAttributes.at(attr);
1357 }
1358 handleAttributeError(SUMO_ATTR_PERIOD, "time");
1359 throw ProcessError();
1360 }
1361}
1362
1363
1364const RGBColor&
1366 if (hasColorAttribute(attr)) {
1367 return myColorAttributes.at(attr);
1368 } else {
1369 handleAttributeError(attr, "color");
1370 throw ProcessError();
1371 }
1372}
1373
1374
1375const std::vector<std::string>&
1377 if (hasStringListAttribute(attr)) {
1378 return myStringListAttributes.at(attr);
1379 } else {
1380 handleAttributeError(attr, "string list");
1381 throw ProcessError();
1382 }
1383}
1384
1385
1386const std::vector<double>&
1388 if (hasDoubleListAttribute(attr)) {
1389 return myDoubleListAttributes.at(attr);
1390 } else {
1391 handleAttributeError(attr, "double list");
1392 throw ProcessError();
1393 }
1394}
1395
1396
1397const PositionVector&
1399 if (hasPositionVectorAttribute(attr)) {
1400 return myPositionVectorAttributes.at(attr);
1401 } else {
1402 handleAttributeError(attr, "position vector");
1403 throw ProcessError();
1404 }
1405}
1406
1407const std::string&
1409 if (hasParentID(tag)) {
1410 return myParentIDs.at(tag);
1411 } else {
1412 WRITE_ERRORF(TL("Trying to get undefined parent '%' in SUMOBaseObject '%'"), toString(tag), toString(myTag));
1413 throw ProcessError();
1414 }
1415}
1416
1417
1420 return myVClass;
1421}
1422
1423
1424const SUMOVTypeParameter&
1426 if (myDefinedVehicleTypeParameter) {
1427 return myVehicleTypeParameter;
1428 } else {
1429 throw ProcessError(TL("Undefined vehicleType parameter"));
1430 }
1431}
1432
1433
1436 if (myDefinedVehicleParameter) {
1437 return myVehicleParameter;
1438 } else {
1439 throw ProcessError(TL("Undefined vehicle parameter"));
1440 }
1441}
1442
1443
1446 if (myDefinedStopParameter) {
1447 return myStopParameter;
1448 } else {
1449 throw ProcessError(TL("Undefined stop parameter"));
1450 }
1451
1452}
1453
1454
1455const std::map<std::string, std::string>&
1457 return myParameters;
1458}
1459
1460
1463 return myPlanParameters;
1464}
1465
1466
1467const std::vector<CommonXMLStructure::SumoBaseObject*>&
1469 return mySumoBaseObjectChildren;
1470}
1471
1472
1473bool
1475 return myStringAttributes.count(attr) > 0;
1476}
1477
1478
1479bool
1481 return myIntAttributes.count(attr) > 0;
1482}
1483
1484
1485bool
1487 return myDoubleAttributes.count(attr) > 0;
1488}
1489
1490
1491bool
1493 return myBoolAttributes.count(attr) > 0;
1494}
1495
1496
1497bool
1499 return myPositionAttributes.count(attr) > 0;
1500}
1501
1502
1503bool
1505 return myTimeAttributes.count(attr) > 0;
1506}
1507
1508
1509bool
1511 return myColorAttributes.count(attr) > 0;
1512}
1513
1514
1515bool
1517 return myStringListAttributes.count(attr) > 0;
1518}
1519
1520
1521bool
1523 return myDoubleListAttributes.count(attr) > 0;
1524}
1525
1526
1527bool
1529 return myPositionVectorAttributes.count(attr) > 0;
1530}
1531
1532
1533bool
1535 return myParentIDs.count(tag) > 0;
1536}
1537
1538
1539void
1541 myStringAttributes[attr] = value;
1542}
1543
1544
1545void
1547 myIntAttributes[attr] = value;
1548}
1549
1550
1551void
1553 myDoubleAttributes[attr] = value;
1554}
1555
1556
1557void
1559 myBoolAttributes[attr] = value;
1560}
1561
1562
1563void
1565 myPositionAttributes[attr] = value;
1566}
1567
1568
1569void
1571 myTimeAttributes[attr] = value;
1572}
1573
1574
1575void
1577 myColorAttributes[attr] = value;
1578}
1579
1580
1581void
1582CommonXMLStructure::SumoBaseObject::addStringListAttribute(const SumoXMLAttr attr, const std::vector<std::string>& value) {
1583 myStringListAttributes[attr] = value;
1584}
1585
1586
1587void
1589 myDoubleListAttributes[attr] = value;
1590}
1591
1592
1593void
1595 myPositionVectorAttributes[attr] = value;
1596}
1597
1598
1599void
1601 myParentIDs[tag] = ID;
1602}
1603
1604
1605void
1607 const auto parameters = StringTokenizer(value, '|').getVector();
1608 for (const auto& parameter : parameters) {
1609 const auto keyValue = StringTokenizer(parameter, '=').getVector();
1610 addParameter(keyValue[0], keyValue[1]);
1611 }
1612}
1613
1614
1615void
1616CommonXMLStructure::SumoBaseObject::addParameter(const std::string& key, const std::string& value) {
1617 // check if we have to insert in vType, vehicle or stop parameters
1618 if (myDefinedVehicleTypeParameter) {
1619 myVehicleTypeParameter.setParameter(key, value);
1620 } else if (myDefinedVehicleParameter) {
1621 myVehicleParameter.setParameter(key, value);
1622 } else if (myDefinedStopParameter) {
1623 myStopParameter.setParameter(key, value);
1624 } else {
1625 myParameters[key] = value;
1626 }
1627}
1628
1629
1630void
1634
1635
1636void
1638 myVehicleTypeParameter = *vehicleTypeParameter;
1639 myDefinedVehicleTypeParameter = true;
1640 // set attribute id
1641 addStringAttribute(SUMO_ATTR_ID, myVehicleTypeParameter.id);
1642}
1643
1644
1645void
1647 myVehicleParameter = *vehicleParameter;
1648 myDefinedVehicleParameter = true;
1649 // set attribute id
1650 if (!myVehicleParameter.id.empty()) {
1651 addStringAttribute(SUMO_ATTR_ID, myVehicleParameter.id);
1652 }
1653 // set attribute route
1654 if (!vehicleParameter->routeid.empty()) {
1655 addStringAttribute(SUMO_ATTR_ROUTE, myVehicleParameter.routeid);
1656 }
1657}
1658
1659
1660void
1662 myStopParameter = stopParameter;
1663 myDefinedStopParameter = true;
1664 // set attribute edge
1665 if (!myStopParameter.edge.empty()) {
1666 addStringAttribute(SUMO_ATTR_EDGE, myStopParameter.edge);
1667 }
1668 // set attribute lane
1669 if (!myStopParameter.lane.empty()) {
1670 addStringAttribute(SUMO_ATTR_LANE, myStopParameter.lane);
1671 }
1672 // set attribute busStop
1673 if (!myStopParameter.busstop.empty()) {
1674 addStringAttribute(SUMO_ATTR_BUS_STOP, myStopParameter.busstop);
1675 }
1676 // set attribute containerstop
1677 if (!myStopParameter.containerstop.empty()) {
1678 addStringAttribute(SUMO_ATTR_CONTAINER_STOP, myStopParameter.containerstop);
1679 }
1680 // set attribute parkingarea
1681 if (!myStopParameter.parkingarea.empty()) {
1682 addStringAttribute(SUMO_ATTR_PARKING_AREA, myStopParameter.parkingarea);
1683 }
1684 // set attribute chargingStation
1685 if (!myStopParameter.chargingStation.empty()) {
1686 addStringAttribute(SUMO_ATTR_CHARGING_STATION, myStopParameter.chargingStation);
1687 }
1688}
1689
1690
1691void
1693 myPlanParameters = planParameters;
1694}
1695
1696void
1698 // just add it into mySumoBaseObjectChildren
1699 mySumoBaseObjectChildren.push_back(sumoBaseObject);
1700}
1701
1702
1703void
1705 // find sumoBaseObject
1706 auto it = std::find(mySumoBaseObjectChildren.begin(), mySumoBaseObjectChildren.end(), sumoBaseObject);
1707 // check iterator
1708 if (it != mySumoBaseObjectChildren.end()) {
1709 mySumoBaseObjectChildren.erase(it);
1710 }
1711}
1712
1713
1714void
1716 WRITE_ERRORF(TL("Trying to get undefined % attribute '%' in SUMOBaseObject '%'"), type, toString(attr), toString(myTag));
1717}
1718
1719// ---------------------------------------------------------------------------
1720// CommonXMLStructure - methods
1721// ---------------------------------------------------------------------------
1722
1728
1729
1731 // delete mySumoBaseObjectRoot (this will also delete all SumoBaseObjectChildrens)
1733 delete mySumoBaseObjectRoot;
1734 }
1735}
1736
1737
1738void
1740 // first check if root is empty
1741 if (mySumoBaseObjectRoot == nullptr) {
1742 // create root
1743 mySumoBaseObjectRoot = new SumoBaseObject(nullptr);
1744 // set tag
1746 // update last inserted Root
1748 } else {
1749 // create new node
1750 SumoBaseObject* newSumoBaseObject = new SumoBaseObject(myCurrentSumoBaseObject);
1751 // update last inserted node
1752 myCurrentSumoBaseObject = newSumoBaseObject;
1753 }
1754}
1755
1756
1757void
1759 // check that myCurrentSumoBaseObject is valid
1761 // check if last inserted SumoBaseObject is the root
1763 // reset both pointers
1764 myCurrentSumoBaseObject = nullptr;
1765 mySumoBaseObjectRoot = nullptr;
1766 } else {
1767 // update last inserted SumoBaseObject
1769 }
1770 }
1771}
1772
1773
1774void
1776 // delete current sumo base object and use their parent as sumo base object
1780 myCurrentSumoBaseObject = nullptr;
1781 mySumoBaseObjectRoot = nullptr;
1782 } else {
1783 auto parentSumoBaseObject = myCurrentSumoBaseObject->getParentSumoBaseObject();
1785 myCurrentSumoBaseObject = parentSumoBaseObject;
1786 }
1787 }
1788}
1789
1790
1795
1796
1801
1802/****************************************************************************/
long long int SUMOTime
Definition GUI.h:36
#define WRITE_ERRORF(...)
Definition MsgHandler.h:297
#define WRITE_WARNING(msg)
Definition MsgHandler.h:287
#define TL(string)
Definition MsgHandler.h:305
#define TLF(string,...)
Definition MsgHandler.h:307
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
Definition SUMOTime.cpp:91
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_IGNORING
vehicles ignoring classes
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ GNE_TAG_RIDE_CHARGINGSTATION_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_TAZ_TAZ
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_TRAINSTOP
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_BUSSTOP
@ GNE_TAG_TRANSHIP_PARKINGAREA_BUSSTOP
@ GNE_TAG_TRANSPORT_TAZ_CONTAINERSTOP
@ GNE_TAG_TRANSHIP_PARKINGAREA_CHARGINGSTATION
@ GNE_TAG_RIDE_EDGE_TAZ
@ GNE_TAG_WALK_BUSSTOP_BUSSTOP
@ GNE_TAG_TRANSPORT_JUNCTION_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_JUNCTION_EDGE
@ GNE_TAG_PERSONTRIP_EDGE_EDGE
@ GNE_TAG_PERSONTRIP_TAZ_EDGE
@ GNE_TAG_TRANSHIP_JUNCTION_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_EDGE_CONTAINERSTOP
@ GNE_TAG_WALK_EDGE_TAZ
@ GNE_TAG_WALK_PARKINGAREA_CHARGINGSTATION
@ GNE_TAG_WALK_CHARGINGSTATION_JUNCTION
@ GNE_TAG_RIDE_CHARGINGSTATION_TAZ
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_TAZ
@ GNE_TAG_RIDE_CONTAINERSTOP_BUSSTOP
@ GNE_TAG_TRANSPORT_BUSSTOP_JUNCTION
@ GNE_TAG_RIDE_BUSSTOP_BUSSTOP
@ GNE_TAG_WALK_PARKINGAREA_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_TAZ_CONTAINERSTOP
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_BUSSTOP
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_TRAINSTOP
@ GNE_TAG_PERSONTRIP_EDGE_JUNCTION
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_JUNCTION
@ GNE_TAG_TRANSHIP_TRAINSTOP_CHARGINGSTATION
@ GNE_TAG_RIDE_CONTAINERSTOP_CONTAINERSTOP
@ GNE_TAG_TRANSHIP_TRAINSTOP_EDGE
@ GNE_TAG_WALK_TAZ_BUSSTOP
@ GNE_TAG_PERSONTRIP_EDGE_PARKINGAREA
@ GNE_TAG_PERSONTRIP_TRAINSTOP_EDGE
@ GNE_TAG_PERSONTRIP_TRAINSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_PARKINGAREA_TRAINSTOP
@ GNE_TAG_STOPCONTAINER_TRAINSTOP
@ GNE_TAG_RIDE_JUNCTION_BUSSTOP
@ GNE_TAG_RIDE_PARKINGAREA_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_PARKINGAREA
@ GNE_TAG_PERSONTRIP_TRAINSTOP_PARKINGAREA
@ GNE_TAG_TRANSPORT_TAZ_PARKINGAREA
@ GNE_TAG_PERSONTRIP_TAZ_CHARGINGSTATION
@ GNE_TAG_RIDE_CONTAINERSTOP_EDGE
@ GNE_TAG_TRANSHIP_TAZ_EDGE
@ GNE_TAG_WALK_BUSSTOP_CHARGINGSTATION
@ GNE_TAG_PERSONTRIP_BUSSTOP_EDGE
@ GNE_TAG_WALK_TRAINSTOP_CHARGINGSTATION
@ GNE_TAG_WALK_PARKINGAREA_TRAINSTOP
@ GNE_TAG_WALK_PARKINGAREA_PARKINGAREA
@ GNE_TAG_TRANSPORT_EDGE_TRAINSTOP
@ GNE_TAG_WALK_BUSSTOP_TRAINSTOP
@ GNE_TAG_TRANSHIP_EDGE_CHARGINGSTATION
@ GNE_TAG_PERSONTRIP_TAZ_TRAINSTOP
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_TAZ
@ GNE_TAG_WALK_TAZ_CONTAINERSTOP
@ GNE_TAG_WALK_PARKINGAREA_JUNCTION
@ GNE_TAG_WALK_CONTAINERSTOP_EDGE
@ GNE_TAG_TRANSHIP_JUNCTION_BUSSTOP
@ GNE_TAG_PERSONTRIP_EDGE_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_EDGE_PARKINGAREA
@ GNE_TAG_TRANSPORT_TRAINSTOP_JUNCTION
@ GNE_TAG_TRANSHIP_PARKINGAREA_JUNCTION
@ GNE_TAG_TRANSHIP_BUSSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_TAZ_TRAINSTOP
@ GNE_TAG_WALK_EDGE_PARKINGAREA
@ GNE_TAG_TRANSPORT_EDGE_BUSSTOP
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_EDGE
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_PARKINGAREA
@ SUMO_TAG_NOTHING
invalid tag, must be the last one
@ GNE_TAG_WALK_PARKINGAREA_EDGE
@ GNE_TAG_TRANSHIP_EDGE_EDGE
@ GNE_TAG_RIDE_TAZ_EDGE
@ GNE_TAG_RIDE_TRAINSTOP_JUNCTION
@ GNE_TAG_WALK_EDGES
@ GNE_TAG_RIDE_TRAINSTOP_CONTAINERSTOP
@ GNE_TAG_TRANSPORT_JUNCTION_PARKINGAREA
@ GNE_TAG_RIDE_CHARGINGSTATION_EDGE
@ GNE_TAG_RIDE_CHARGINGSTATION_CONTAINERSTOP
@ GNE_TAG_WALK_CONTAINERSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_PARKINGAREA_CONTAINERSTOP
@ GNE_TAG_TRANSPORT_TRAINSTOP_TAZ
@ GNE_TAG_WALK_BUSSTOP_JUNCTION
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_TRAINSTOP
@ SUMO_TAG_ROOTFILE
root file
@ GNE_TAG_TRANSHIP_EDGE_CONTAINERSTOP
@ GNE_TAG_WALK_CONTAINERSTOP_JUNCTION
@ GNE_TAG_TRANSPORT_PARKINGAREA_PARKINGAREA
@ GNE_TAG_RIDE_EDGE_JUNCTION
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_TRAINSTOP
@ GNE_TAG_TRANSPORT_TRAINSTOP_TRAINSTOP
@ GNE_TAG_RIDE_PARKINGAREA_TAZ
@ GNE_TAG_WALK_CHARGINGSTATION_TRAINSTOP
@ GNE_TAG_PERSONTRIP_BUSSTOP_CONTAINERSTOP
@ GNE_TAG_TRANSPORT_TRAINSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_PARKINGAREA_TAZ
@ GNE_TAG_STOPCONTAINER_EDGE
@ GNE_TAG_WALK_TRAINSTOP_TAZ
@ GNE_TAG_PERSONTRIP_PARKINGAREA_JUNCTION
@ GNE_TAG_TRANSPORT_JUNCTION_BUSSTOP
@ GNE_TAG_TRANSHIP_JUNCTION_PARKINGAREA
@ GNE_TAG_STOPCONTAINER_PARKINGAREA
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_TRAINSTOP
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_CONTAINERSTOP
@ GNE_TAG_TRANSPORT_TRAINSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_PARKINGAREA_CONTAINERSTOP
@ GNE_TAG_STOPPERSON_BUSSTOP
@ GNE_TAG_TRANSPORT_BUSSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_BUSSTOP_TRAINSTOP
@ GNE_TAG_RIDE_PARKINGAREA_BUSSTOP
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_TAZ
@ GNE_TAG_RIDE_TAZ_TRAINSTOP
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_EDGE
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_PARKINGAREA
@ GNE_TAG_PERSONTRIP_JUNCTION_BUSSTOP
@ GNE_TAG_TRANSHIP_BUSSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_BUSSTOP
@ GNE_TAG_TRANSPORT_PARKINGAREA_EDGE
@ GNE_TAG_PERSONTRIP_TRAINSTOP_TAZ
@ GNE_TAG_RIDE_PARKINGAREA_JUNCTION
@ GNE_TAG_TRANSHIP_PARKINGAREA_TRAINSTOP
@ GNE_TAG_RIDE_JUNCTION_JUNCTION
@ GNE_TAG_WALK_BUSSTOP_CONTAINERSTOP
@ GNE_TAG_RIDE_BUSSTOP_TAZ
@ GNE_TAG_PERSONTRIP_TAZ_PARKINGAREA
@ GNE_TAG_TRANSHIP_BUSSTOP_JUNCTION
@ GNE_TAG_RIDE_JUNCTION_PARKINGAREA
@ GNE_TAG_TRANSPORT_EDGE_TAZ
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_PARKINGAREA
@ GNE_TAG_WALK_JUNCTION_PARKINGAREA
@ GNE_TAG_TRANSHIP_EDGE_TAZ
@ GNE_TAG_RIDE_TRAINSTOP_TAZ
@ GNE_TAG_RIDE_TRAINSTOP_CHARGINGSTATION
@ GNE_TAG_WALK_CHARGINGSTATION_BUSSTOP
@ GNE_TAG_PERSONTRIP_JUNCTION_TRAINSTOP
@ GNE_TAG_RIDE_JUNCTION_TRAINSTOP
@ GNE_TAG_WALK_CONTAINERSTOP_TAZ
@ GNE_TAG_PERSONTRIP_TRAINSTOP_BUSSTOP
@ GNE_TAG_TRANSHIP_BUSSTOP_EDGE
@ GNE_TAG_TRANSHIP_TRAINSTOP_JUNCTION
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_EDGE_JUNCTION
@ GNE_TAG_PERSONTRIP_BUSSTOP_JUNCTION
@ GNE_TAG_TRANSHIP_EDGES
@ GNE_TAG_TRANSHIP_TAZ_TRAINSTOP
@ GNE_TAG_WALK_JUNCTION_CONTAINERSTOP
@ GNE_TAG_STOPCONTAINER_CONTAINERSTOP
@ GNE_TAG_RIDE_TAZ_CONTAINERSTOP
@ GNE_TAG_RIDE_BUSSTOP_TRAINSTOP
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_EDGE
@ GNE_TAG_PERSONTRIP_EDGE_TRAINSTOP
@ GNE_TAG_RIDE_BUSSTOP_EDGE
@ GNE_TAG_RIDE_TRAINSTOP_BUSSTOP
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_TAZ
@ GNE_TAG_WALK_TRAINSTOP_EDGE
@ GNE_TAG_RIDE_EDGE_EDGE
@ GNE_TAG_PERSONTRIP_PARKINGAREA_EDGE
@ GNE_TAG_TRANSPORT_BUSSTOP_CHARGINGSTATION
@ GNE_TAG_RIDE_JUNCTION_CONTAINERSTOP
@ GNE_TAG_TRANSPORT_PARKINGAREA_TAZ
@ GNE_TAG_PERSONTRIP_PARKINGAREA_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_TRAINSTOP_TRAINSTOP
@ GNE_TAG_TRANSPORT_EDGE_EDGE
@ GNE_TAG_WALK_EDGE_TRAINSTOP
@ GNE_TAG_WALK_TAZ_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_EDGE_CONTAINERSTOP
@ GNE_TAG_STOPCONTAINER_BUSSTOP
@ GNE_TAG_WALK_JUNCTION_TAZ
@ GNE_TAG_WALK_JUNCTION_CHARGINGSTATION
@ GNE_TAG_WALK_CHARGINGSTATION_TAZ
@ GNE_TAG_PERSONTRIP_TAZ_BUSSTOP
@ GNE_TAG_RIDE_PARKINGAREA_CHARGINGSTATION
@ GNE_TAG_RIDE_BUSSTOP_JUNCTION
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_JUNCTION
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_CHARGINGSTATION
@ GNE_TAG_WALK_JUNCTION_JUNCTION
@ GNE_TAG_TRANSPORT_BUSSTOP_TAZ
@ GNE_TAG_RIDE_JUNCTION_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_PARKINGAREA_TRAINSTOP
@ GNE_TAG_TRANSHIP_PARKINGAREA_TAZ
@ GNE_TAG_TRANSHIP_PARKINGAREA_PARKINGAREA
@ GNE_TAG_WALK_CONTAINERSTOP_PARKINGAREA
@ GNE_TAG_TRANSHIP_TAZ_PARKINGAREA
@ GNE_TAG_WALK_EDGE_EDGE
@ GNE_TAG_PERSONTRIP_TAZ_TAZ
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_JUNCTION
@ GNE_TAG_TRANSHIP_TAZ_BUSSTOP
@ GNE_TAG_TRANSPORT_TAZ_EDGE
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_CHARGINGSTATION
@ GNE_TAG_RIDE_EDGE_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_TAZ_TAZ
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_EDGE
@ GNE_TAG_PERSONTRIP_EDGE_BUSSTOP
@ GNE_TAG_TRANSPORT_EDGE_JUNCTION
@ GNE_TAG_WALK_CHARGINGSTATION_CONTAINERSTOP
@ GNE_TAG_TRANSPORT_TAZ_BUSSTOP
@ GNE_TAG_WALK_BUSSTOP_PARKINGAREA
@ GNE_TAG_WALK_CHARGINGSTATION_PARKINGAREA
@ GNE_TAG_TRANSPORT_JUNCTION_JUNCTION
@ GNE_TAG_PERSONTRIP_CHARGINGSTATION_CONTAINERSTOP
@ GNE_TAG_TRANSHIP_BUSSTOP_TRAINSTOP
@ GNE_TAG_PERSONTRIP_BUSSTOP_TAZ
@ GNE_TAG_RIDE_TAZ_PARKINGAREA
@ GNE_TAG_WALK_CONTAINERSTOP_BUSSTOP
@ GNE_TAG_RIDE_CHARGINGSTATION_PARKINGAREA
@ GNE_TAG_RIDE_CHARGINGSTATION_BUSSTOP
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_CONTAINERSTOP
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_TAZ
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_EDGE
@ GNE_TAG_PERSONTRIP_BUSSTOP_CHARGINGSTATION
@ GNE_TAG_WALK_BUSSTOP_EDGE
@ GNE_TAG_RIDE_JUNCTION_TAZ
@ GNE_TAG_TRANSPORT_TRAINSTOP_BUSSTOP
@ GNE_TAG_WALK_JUNCTION_TRAINSTOP
@ GNE_TAG_RIDE_TAZ_TAZ
@ GNE_TAG_TRANSHIP_EDGE_TRAINSTOP
@ GNE_TAG_TRANSHIP_TRAINSTOP_TRAINSTOP
@ GNE_TAG_RIDE_PARKINGAREA_PARKINGAREA
@ GNE_TAG_WALK_TRAINSTOP_PARKINGAREA
@ GNE_TAG_RIDE_EDGE_BUSSTOP
@ GNE_TAG_WALK_TAZ_JUNCTION
@ GNE_TAG_RIDE_TAZ_JUNCTION
@ GNE_TAG_PERSONTRIP_JUNCTION_PARKINGAREA
@ GNE_TAG_TRANSPORT_BUSSTOP_TRAINSTOP
@ GNE_TAG_TRANSPORT_TRAINSTOP_PARKINGAREA
@ GNE_TAG_TRANSPORT_PARKINGAREA_JUNCTION
@ GNE_TAG_STOPPERSON_CONTAINERSTOP
@ GNE_TAG_WALK_BUSSTOP_TAZ
@ GNE_TAG_RIDE_CONTAINERSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_BUSSTOP_BUSSTOP
@ GNE_TAG_TRANSHIP_BUSSTOP_PARKINGAREA
@ GNE_TAG_PERSONTRIP_JUNCTION_JUNCTION
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_JUNCTION
@ GNE_TAG_WALK_TAZ_TAZ
@ GNE_TAG_WALK_TRAINSTOP_BUSSTOP
@ GNE_TAG_TRANSHIP_JUNCTION_TRAINSTOP
@ GNE_TAG_WALK_TAZ_EDGE
@ GNE_TAG_PERSONTRIP_TAZ_JUNCTION
@ GNE_TAG_WALK_EDGE_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_JUNCTION_TAZ
@ GNE_TAG_TRANSPORT_PARKINGAREA_BUSSTOP
@ GNE_TAG_RIDE_EDGE_TRAINSTOP
@ GNE_TAG_TRANSHIP_TAZ_JUNCTION
@ GNE_TAG_TRANSHIP_JUNCTION_CHARGINGSTATION
@ GNE_TAG_WALK_TRAINSTOP_CONTAINERSTOP
@ GNE_TAG_WALK_JUNCTION_BUSSTOP
@ GNE_TAG_TRANSHIP_JUNCTION_JUNCTION
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_JUNCTION
@ GNE_TAG_WALK_JUNCTION_EDGE
@ GNE_TAG_PERSONTRIP_BUSSTOP_PARKINGAREA
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_TRAINSTOP
@ GNE_TAG_PERSONTRIP_PARKINGAREA_BUSSTOP
@ GNE_TAG_RIDE_CHARGINGSTATION_JUNCTION
@ GNE_TAG_RIDE_BUSSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_JUNCTION_TRAINSTOP
@ GNE_TAG_WALK_EDGE_CONTAINERSTOP
@ GNE_TAG_WALK_TRAINSTOP_JUNCTION
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_PARKINGAREA
@ GNE_TAG_STOPPERSON_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_TAZ
@ GNE_TAG_TRANSPORT_BUSSTOP_EDGE
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_BUSSTOP
@ GNE_TAG_WALK_PARKINGAREA_TAZ
@ GNE_TAG_PERSONTRIP_JUNCTION_EDGE
@ GNE_TAG_RIDE_CONTAINERSTOP_PARKINGAREA
@ GNE_TAG_RIDE_CHARGINGSTATION_TRAINSTOP
@ GNE_TAG_STOPPERSON_TRAINSTOP
@ GNE_TAG_TRANSPORT_CHARGINGSTATION_BUSSTOP
@ GNE_TAG_PERSONTRIP_PARKINGAREA_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_CONTAINERSTOP
@ GNE_TAG_TRANSHIP_EDGE_BUSSTOP
@ GNE_TAG_RIDE_BUSSTOP_PARKINGAREA
@ GNE_TAG_WALK_EDGE_JUNCTION
@ GNE_TAG_RIDE_PARKINGAREA_EDGE
@ GNE_TAG_PERSONTRIP_JUNCTION_TAZ
@ GNE_TAG_TRANSHIP_PARKINGAREA_EDGE
@ GNE_TAG_TRANSPORT_PARKINGAREA_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_TRAINSTOP_CONTAINERSTOP
@ GNE_TAG_PERSONTRIP_JUNCTION_CONTAINERSTOP
@ GNE_TAG_WALK_TRAINSTOP_TRAINSTOP
@ GNE_TAG_WALK_CHARGINGSTATION_EDGE
@ GNE_TAG_TRANSHIP_EDGE_PARKINGAREA
@ GNE_TAG_WALK_EDGE_BUSSTOP
@ GNE_TAG_PERSONTRIP_PARKINGAREA_PARKINGAREA
@ GNE_TAG_TRANSHIP_TRAINSTOP_BUSSTOP
@ GNE_TAG_TRANSHIP_BUSSTOP_BUSSTOP
@ GNE_TAG_TRANSPORT_TRAINSTOP_EDGE
@ GNE_TAG_PERSONTRIP_TRAINSTOP_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_EDGE_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_CONTAINERSTOP
@ GNE_TAG_WALK_CONTAINERSTOP_TRAINSTOP
@ GNE_TAG_RIDE_EDGE_PARKINGAREA
@ GNE_TAG_TRANSHIP_CHARGINGSTATION_JUNCTION
@ GNE_TAG_RIDE_BUSSTOP_CONTAINERSTOP
@ GNE_TAG_WALK_TAZ_TRAINSTOP
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_CHARGINGSTATION
@ GNE_TAG_RIDE_JUNCTION_EDGE
@ GNE_TAG_TRANSHIP_TRAINSTOP_PARKINGAREA
@ GNE_TAG_PERSONTRIP_CONTAINERSTOP_BUSSTOP
@ GNE_TAG_TRANSHIP_JUNCTION_TAZ
@ GNE_TAG_TRANSPORT_JUNCTION_CONTAINERSTOP
@ GNE_TAG_TRANSPORT_TAZ_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_TAZ_JUNCTION
@ GNE_TAG_RIDE_TRAINSTOP_TRAINSTOP
@ GNE_TAG_TRANSPORT_JUNCTION_EDGE
@ GNE_TAG_TRANSPORT_BUSSTOP_BUSSTOP
@ GNE_TAG_WALK_PARKINGAREA_BUSSTOP
@ GNE_TAG_RIDE_CONTAINERSTOP_TAZ
@ GNE_TAG_STOPCONTAINER_CHARGINGSTATION
@ GNE_TAG_TRANSPORT_BUSSTOP_PARKINGAREA
@ GNE_TAG_WALK_TAZ_PARKINGAREA
@ GNE_TAG_TRANSHIP_TAZ_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_BUSSTOP_TAZ
@ GNE_TAG_PERSONTRIP_TRAINSTOP_JUNCTION
@ GNE_TAG_RIDE_CONTAINERSTOP_TRAINSTOP
@ GNE_TAG_RIDE_TAZ_CHARGINGSTATION
@ GNE_TAG_STOPPERSON_EDGE
@ GNE_TAG_RIDE_CONTAINERSTOP_JUNCTION
@ GNE_TAG_PERSONTRIP_JUNCTION_CHARGINGSTATION
@ GNE_TAG_RIDE_PARKINGAREA_TRAINSTOP
@ GNE_TAG_TRANSPORT_CONTAINERSTOP_PARKINGAREA
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_CHARGINGSTATION
@ GNE_TAG_WALK_ROUTE
@ GNE_TAG_PERSONTRIP_EDGE_TAZ
@ GNE_TAG_RIDE_TAZ_BUSSTOP
@ GNE_TAG_WALK_CONTAINERSTOP_CONTAINERSTOP
@ GNE_TAG_RIDE_TRAINSTOP_PARKINGAREA
@ GNE_TAG_TRANSHIP_CONTAINERSTOP_EDGE
@ GNE_TAG_WALK_CHARGINGSTATION_CHARGINGSTATION
@ GNE_TAG_TRANSHIP_TRAINSTOP_TAZ
@ GNE_TAG_RIDE_EDGE_CONTAINERSTOP
@ GNE_TAG_STOPPERSON_PARKINGAREA
@ GNE_TAG_RIDE_TRAINSTOP_EDGE
@ GNE_TAG_TRANSHIP_TAZ_CONTAINERSTOP
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ GNE_ATTR_FROM_TRAINSTOP
@ SUMO_ATTR_LANE
@ GNE_ATTR_FROM_BUSSTOP
@ SUMO_ATTR_FROM_JUNCTION
@ SUMO_ATTR_CONTAINER_STOP
@ SUMO_ATTR_PARKING_AREA
@ SUMO_ATTR_EDGE
@ SUMO_ATTR_BUS_STOP
@ SUMO_ATTR_TRAIN_STOP
@ SUMO_ATTR_TO_JUNCTION
@ SUMO_ATTR_EDGES
the edges of a route
@ SUMO_ATTR_CHARGING_STATION
@ GNE_ATTR_FROM_PARKINGAREA
@ GNE_ATTR_FROM_CONTAINERSTOP
@ SUMO_ATTR_PERIOD
@ SUMO_ATTR_TO_TAZ
@ SUMO_ATTR_FREQUENCY
@ SUMO_ATTR_TO
@ SUMO_ATTR_FROM
@ SUMO_ATTR_FROM_TAZ
@ GNE_ATTR_FROM_ROUTE
@ GNE_ATTR_FROM_CHARGINGSTATION
@ SUMO_ATTR_ROUTE
@ SUMO_ATTR_ID
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
plan parameters (used for group all from-to parameters related with plans)
SumoXMLTag getPersonStopTag() const
get the person stop tag for the current combination of parameters
SumoXMLTag getRideTag() const
get the ride tag for the current combination of parameters
void writeIgnoringMessage(const CommonXMLStructure::SumoBaseObject *previousPlanObj, const std::string &oldType, const std::string &oldId, const std::string &newType, const std::string &newId) const
write ignoring message
int getNumberOfDefinedParameters() const
get number of defined plans
SumoXMLTag getPersonTripTag() const
get the personTrip tag for the current combination of parameters
SumoXMLTag getTransportTag() const
get the transport tag for the current combination of parameters
const CommonXMLStructure::SumoBaseObject * getPreviousPlanObj(const CommonXMLStructure::SumoBaseObject *sumoBaseObject) const
get previous plan obj
bool isSingleEdgePlan() const
check if this is a single-edge plan
void updateFromAttributes(const CommonXMLStructure::SumoBaseObject *sumoBaseObject)
update the from attributes
SumoXMLTag getContainerStopTag() const
get the container stop tag for the current combination of parameters
SumoXMLTag getWalkTag() const
get the walk tag for the current combination of parameters
SumoXMLTag getTranshipTag() const
get the tranship tag for the current combination of parameters
void resetPreviousFromAttributes(const CommonXMLStructure::SumoBaseObject *previousPlanObj, const std::string &newType, const std::string &newId) const
reste all previous from attributes
void addDoubleListAttribute(const SumoXMLAttr attr, const std::vector< double > &value)
add double list attribute into current SumoBaseObject node
const std::vector< double > & getDoubleListAttribute(const SumoXMLAttr attr) const
get double list attribute
void addIntAttribute(const SumoXMLAttr attr, const int value)
add int attribute into current SumoBaseObject node
void setVehicleTypeParameter(const SUMOVTypeParameter *vehicleTypeParameter)
set vehicle type parameters
void addSumoBaseObjectChild(SumoBaseObject *sumoBaseObject)
add SumoBaseObject child
const SUMOVehicleParameter::Stop & getStopParameter() const
get stop parameters
const RGBColor & getColorAttribute(const SumoXMLAttr attr) const
get color attribute
SUMOTime getTimeAttribute(const SumoXMLAttr attr) const
get time attribute
const PositionVector & getPositionVectorAttribute(const SumoXMLAttr attr) const
get PositionVector attribute
SumoBaseObject(SumoBaseObject *sumoBaseObjectParent)
constructor
bool hasBoolAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given bool attribute
bool hasParentID(const SumoXMLTag tag) const
check if current SumoBaseObject has the given parent ID
void removeSumoBaseObjectChild(SumoBaseObject *sumoBaseObject)
remove SumoBaseObject child
bool hasStringAttribute(const SumoXMLAttr attr) const
has function
std::map< std::string, std::string > getAllAttributes() const
get all attributes in string format
bool hasPositionAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given bool attribute
void setTag(const SumoXMLTag tag)
set SumoBaseObject tag
SumoBaseObject * getParentSumoBaseObject() const
get pointer to mySumoBaseObjectParent SumoBaseObject (if is null, then is the root)
const Position & getPositionAttribute(const SumoXMLAttr attr) const
get Position attribute
const CommonXMLStructure::PlanParameters & getPlanParameters() const
get plan parameteres
void addPositionVectorAttribute(const SumoXMLAttr attr, const PositionVector &value)
add PositionVector attribute into current SumoBaseObject node
const std::map< std::string, std::string > & getParameters() const
get parameters
SUMOVehicleClass getVClass() const
vehicle class
SumoBaseObject * mySumoBaseObjectParent
pointer to SumoBaseObject parent (If is null, then is the root)
bool hasPositionVectorAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given positionVector attribute
bool hasTimeAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given time attribute
void addBoolAttribute(const SumoXMLAttr attr, const bool value)
add bool attribute into current SumoBaseObject node
void setPlanParameters(const CommonXMLStructure::PlanParameters &planParameters)
set plan parmeter
const SUMOVTypeParameter & getVehicleTypeParameter() const
get current vType
SumoXMLTag getTag() const
get XML myTag
const std::string & getParentID(const SumoXMLTag tag) const
get parent ID
void addParameter(const std::string &key, const std::string &value)
add parameter into current SumoBaseObject node
void addParentID(const SumoXMLTag tag, const std::string &ID)
add parent (string) attribute into current SumoBaseObject node
bool hasColorAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given color attribute
void markAsCreated()
mark as successfully created
void addTimeAttribute(const SumoXMLAttr attr, const SUMOTime value)
add time attribute into current SumoBaseObject node
void addStringListAttribute(const SumoXMLAttr attr, const std::vector< std::string > &value)
add string list attribute into current SumoBaseObject node
bool hasIntAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given int attribute
int getIntAttribute(const SumoXMLAttr attr) const
get int attribute
void addDoubleAttribute(const SumoXMLAttr attr, const double value)
add double attribute into current SumoBaseObject node
void handleAttributeError(const SumoXMLAttr attr, const std::string &type) const
handle attribute error
bool hasDoubleAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given double attribute
void addPositionAttribute(const SumoXMLAttr attr, const Position &value)
add Position attribute into current SumoBaseObject node
bool getBoolAttribute(const SumoXMLAttr attr) const
get bool attribute
void setVClass(SUMOVehicleClass vClass)
set vehicle class
bool wasCreated() const
check if the object was successfully created in build<...> function
SUMOTime getPeriodAttribute() const
get 'period' attribute
void setVehicleParameter(const SUMOVehicleParameter *vehicleParameter)
set vehicle parameters
void addStringAttribute(const SumoXMLAttr attr, const std::string &value)
add string attribute into current SumoBaseObject node
void setStopParameter(const SUMOVehicleParameter::Stop &stopParameter)
add stop parameters
double getDoubleAttribute(const SumoXMLAttr attr) const
get double attribute
const SUMOVehicleParameter & getVehicleParameter() const
get vehicle parameters
bool hasDoubleListAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given double list attribute
const std::vector< std::string > & getStringListAttribute(const SumoXMLAttr attr) const
get string list attribute
bool hasStringListAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given string list attribute
void addColorAttribute(const SumoXMLAttr attr, const RGBColor &value)
add color attribute into current SumoBaseObject node
const std::string & getStringAttribute(const SumoXMLAttr attr) const
get string attribute
void addParameters(const std::string &value)
add parameters into current SumoBaseObject node (format: key=value1|key2=value2|.....
const std::vector< SumoBaseObject * > & getSumoBaseObjectChildren() const
get SumoBaseObject children
void abortSUMOBaseOBject()
abort SUMOBaseOBject
CommonXMLStructure::SumoBaseObject * getSumoBaseObjectRoot() const
get SumoBaseObject root
CommonXMLStructure::SumoBaseObject * getCurrentSumoBaseObject() const
get current editedSumoBaseObject
void openSUMOBaseOBject()
open SUMOBaseOBject
CommonXMLStructure::SumoBaseObject * mySumoBaseObjectRoot
SumoBaseObject root.
CommonXMLStructure::SumoBaseObject * myCurrentSumoBaseObject
last inserted SumoBaseObject
void closeSUMOBaseOBject()
close SUMOBaseOBject
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
A list of positions.
Encapsulated SAX-Attributes.
T getOpt(int attr, const char *objectid, bool &ok, T defaultValue=T(), bool report=true) const
Tries to read given attribute assuming it is an int.
Structure representing possible vehicle parameter.
Definition of vehicle stop (position and duration)
Structure representing possible vehicle parameter.
std::string routeid
The vehicle's route id.
std::vector< std::string > getVector()
return vector of strings