Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/utils/xml/CommonXMLStructure.cpp
169678 views
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
/****************************************************************************/
14
/// @file CommonXMLStructure.cpp
15
/// @author Pablo Alvarez Lopez
16
/// @date May 2021
17
///
18
// Structure for common XML Parsing
19
/****************************************************************************/
20
#include <config.h>
21
22
#include <utils/common/MsgHandler.h>
23
#include <utils/common/StringTokenizer.h>
24
#include <utils/xml/SUMOSAXHandler.h>
25
26
#include "CommonXMLStructure.h"
27
28
29
// ===========================================================================
30
// method definitions
31
// ===========================================================================
32
33
// ---------------------------------------------------------------------------
34
// CommonXMLStructure::PlanParameters - methods
35
// ---------------------------------------------------------------------------
36
37
CommonXMLStructure::PlanParameters::PlanParameters() {}
38
39
40
CommonXMLStructure::PlanParameters::PlanParameters(const CommonXMLStructure::SumoBaseObject* sumoBaseObject,
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
83
void
84
CommonXMLStructure::PlanParameters::clear() {
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
107
bool
108
CommonXMLStructure::PlanParameters::isSingleEdgePlan() const {
109
if (fromEdge.empty()) {
110
return false;
111
} else {
112
return getNumberOfDefinedParameters() == 1;
113
}
114
}
115
116
117
int
118
CommonXMLStructure::PlanParameters::getNumberOfDefinedParameters() const {
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
142
SumoXMLTag
143
CommonXMLStructure::PlanParameters::getWalkTag() const {
144
if (isSingleEdgePlan()) {
145
return GNE_TAG_WALK_EDGE_EDGE;
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()) {
152
return GNE_TAG_WALK_EDGE_EDGE;
153
} else if (!toTAZ.empty()) {
154
return GNE_TAG_WALK_EDGE_TAZ;
155
} else if (!toJunction.empty()) {
156
return GNE_TAG_WALK_EDGE_JUNCTION;
157
} else if (!toBusStop.empty()) {
158
return GNE_TAG_WALK_EDGE_BUSSTOP;
159
} else if (!toTrainStop.empty()) {
160
return GNE_TAG_WALK_EDGE_TRAINSTOP;
161
} else if (!toContainerStop.empty()) {
162
return GNE_TAG_WALK_EDGE_CONTAINERSTOP;
163
} else if (!toChargingStation.empty()) {
164
return GNE_TAG_WALK_EDGE_CHARGINGSTATION;
165
} else if (!toParkingArea.empty()) {
166
return GNE_TAG_WALK_EDGE_PARKINGAREA;
167
} else {
168
return SUMO_TAG_NOTHING;
169
}
170
} else if (!fromTAZ.empty()) {
171
if (!toEdge.empty()) {
172
return GNE_TAG_WALK_TAZ_EDGE;
173
} else if (!toTAZ.empty()) {
174
return GNE_TAG_WALK_TAZ_TAZ;
175
} else if (!toJunction.empty()) {
176
return GNE_TAG_WALK_TAZ_JUNCTION;
177
} else if (!toBusStop.empty()) {
178
return GNE_TAG_WALK_TAZ_BUSSTOP;
179
} else if (!toTrainStop.empty()) {
180
return GNE_TAG_WALK_TAZ_TRAINSTOP;
181
} else if (!toContainerStop.empty()) {
182
return GNE_TAG_WALK_TAZ_CONTAINERSTOP;
183
} else if (!toChargingStation.empty()) {
184
return GNE_TAG_WALK_TAZ_CHARGINGSTATION;
185
} else if (!toParkingArea.empty()) {
186
return GNE_TAG_WALK_TAZ_PARKINGAREA;
187
} else {
188
return SUMO_TAG_NOTHING;
189
}
190
} else if (!fromJunction.empty()) {
191
if (!toEdge.empty()) {
192
return GNE_TAG_WALK_JUNCTION_EDGE;
193
} else if (!toTAZ.empty()) {
194
return GNE_TAG_WALK_JUNCTION_TAZ;
195
} else if (!toJunction.empty()) {
196
return GNE_TAG_WALK_JUNCTION_JUNCTION;
197
} else if (!toBusStop.empty()) {
198
return GNE_TAG_WALK_JUNCTION_BUSSTOP;
199
} else if (!toTrainStop.empty()) {
200
return GNE_TAG_WALK_JUNCTION_TRAINSTOP;
201
} else if (!toContainerStop.empty()) {
202
return GNE_TAG_WALK_JUNCTION_CONTAINERSTOP;
203
} else if (!toChargingStation.empty()) {
204
return GNE_TAG_WALK_JUNCTION_CHARGINGSTATION;
205
} else if (!toParkingArea.empty()) {
206
return GNE_TAG_WALK_JUNCTION_PARKINGAREA;
207
} else {
208
return SUMO_TAG_NOTHING;
209
}
210
} else if (!fromBusStop.empty()) {
211
if (!toEdge.empty()) {
212
return GNE_TAG_WALK_BUSSTOP_EDGE;
213
} else if (!toTAZ.empty()) {
214
return GNE_TAG_WALK_BUSSTOP_TAZ;
215
} else if (!toJunction.empty()) {
216
return GNE_TAG_WALK_BUSSTOP_JUNCTION;
217
} else if (!toBusStop.empty()) {
218
return GNE_TAG_WALK_BUSSTOP_BUSSTOP;
219
} else if (!toTrainStop.empty()) {
220
return GNE_TAG_WALK_BUSSTOP_TRAINSTOP;
221
} else if (!toContainerStop.empty()) {
222
return GNE_TAG_WALK_BUSSTOP_CONTAINERSTOP;
223
} else if (!toChargingStation.empty()) {
224
return GNE_TAG_WALK_BUSSTOP_CHARGINGSTATION;
225
} else if (!toParkingArea.empty()) {
226
return GNE_TAG_WALK_BUSSTOP_PARKINGAREA;
227
} else {
228
return SUMO_TAG_NOTHING;
229
}
230
} else if (!fromTrainStop.empty()) {
231
if (!toEdge.empty()) {
232
return GNE_TAG_WALK_TRAINSTOP_EDGE;
233
} else if (!toTAZ.empty()) {
234
return GNE_TAG_WALK_TRAINSTOP_TAZ;
235
} else if (!toJunction.empty()) {
236
return GNE_TAG_WALK_TRAINSTOP_JUNCTION;
237
} else if (!toBusStop.empty()) {
238
return GNE_TAG_WALK_TRAINSTOP_BUSSTOP;
239
} else if (!toTrainStop.empty()) {
240
return GNE_TAG_WALK_TRAINSTOP_TRAINSTOP;
241
} else if (!toContainerStop.empty()) {
242
return GNE_TAG_WALK_TRAINSTOP_CONTAINERSTOP;
243
} else if (!toChargingStation.empty()) {
244
return GNE_TAG_WALK_TRAINSTOP_CHARGINGSTATION;
245
} else if (!toParkingArea.empty()) {
246
return GNE_TAG_WALK_TRAINSTOP_PARKINGAREA;
247
} else {
248
return SUMO_TAG_NOTHING;
249
}
250
} else if (!fromContainerStop.empty()) {
251
if (!toEdge.empty()) {
252
return GNE_TAG_WALK_CONTAINERSTOP_EDGE;
253
} else if (!toTAZ.empty()) {
254
return GNE_TAG_WALK_CONTAINERSTOP_TAZ;
255
} else if (!toJunction.empty()) {
256
return GNE_TAG_WALK_CONTAINERSTOP_JUNCTION;
257
} else if (!toBusStop.empty()) {
258
return GNE_TAG_WALK_CONTAINERSTOP_BUSSTOP;
259
} else if (!toTrainStop.empty()) {
260
return GNE_TAG_WALK_CONTAINERSTOP_TRAINSTOP;
261
} else if (!toContainerStop.empty()) {
262
return GNE_TAG_WALK_CONTAINERSTOP_CONTAINERSTOP;
263
} else if (!toChargingStation.empty()) {
264
return GNE_TAG_WALK_CONTAINERSTOP_CHARGINGSTATION;
265
} else if (!toParkingArea.empty()) {
266
return GNE_TAG_WALK_CONTAINERSTOP_PARKINGAREA;
267
} else {
268
return SUMO_TAG_NOTHING;
269
}
270
} else if (!fromChargingStation.empty()) {
271
if (!toEdge.empty()) {
272
return GNE_TAG_WALK_CHARGINGSTATION_EDGE;
273
} else if (!toTAZ.empty()) {
274
return GNE_TAG_WALK_CHARGINGSTATION_TAZ;
275
} else if (!toJunction.empty()) {
276
return GNE_TAG_WALK_CHARGINGSTATION_JUNCTION;
277
} else if (!toBusStop.empty()) {
278
return GNE_TAG_WALK_CHARGINGSTATION_BUSSTOP;
279
} else if (!toTrainStop.empty()) {
280
return GNE_TAG_WALK_CHARGINGSTATION_TRAINSTOP;
281
} else if (!toContainerStop.empty()) {
282
return GNE_TAG_WALK_CHARGINGSTATION_CONTAINERSTOP;
283
} else if (!toChargingStation.empty()) {
284
return GNE_TAG_WALK_CHARGINGSTATION_CHARGINGSTATION;
285
} else if (!toParkingArea.empty()) {
286
return GNE_TAG_WALK_CHARGINGSTATION_PARKINGAREA;
287
} else {
288
return SUMO_TAG_NOTHING;
289
}
290
} else if (!fromParkingArea.empty()) {
291
if (!toEdge.empty()) {
292
return GNE_TAG_WALK_PARKINGAREA_EDGE;
293
} else if (!toTAZ.empty()) {
294
return GNE_TAG_WALK_PARKINGAREA_TAZ;
295
} else if (!toJunction.empty()) {
296
return GNE_TAG_WALK_PARKINGAREA_JUNCTION;
297
} else if (!toBusStop.empty()) {
298
return GNE_TAG_WALK_PARKINGAREA_BUSSTOP;
299
} else if (!toTrainStop.empty()) {
300
return GNE_TAG_WALK_PARKINGAREA_TRAINSTOP;
301
} else if (!toContainerStop.empty()) {
302
return GNE_TAG_WALK_PARKINGAREA_CONTAINERSTOP;
303
} else if (!toChargingStation.empty()) {
304
return GNE_TAG_WALK_PARKINGAREA_CHARGINGSTATION;
305
} else if (!toParkingArea.empty()) {
306
return GNE_TAG_WALK_PARKINGAREA_PARKINGAREA;
307
} else {
308
return SUMO_TAG_NOTHING;
309
}
310
} else {
311
return SUMO_TAG_NOTHING;
312
}
313
}
314
315
316
SumoXMLTag
317
CommonXMLStructure::PlanParameters::getPersonTripTag() const {
318
if (isSingleEdgePlan()) {
319
return GNE_TAG_PERSONTRIP_EDGE_EDGE;
320
} else if (!fromEdge.empty()) {
321
if (!toEdge.empty()) {
322
return GNE_TAG_PERSONTRIP_EDGE_EDGE;
323
} else if (!toTAZ.empty()) {
324
return GNE_TAG_PERSONTRIP_EDGE_TAZ;
325
} else if (!toJunction.empty()) {
326
return GNE_TAG_PERSONTRIP_EDGE_JUNCTION;
327
} else if (!toBusStop.empty()) {
328
return GNE_TAG_PERSONTRIP_EDGE_BUSSTOP;
329
} else if (!toTrainStop.empty()) {
330
return GNE_TAG_PERSONTRIP_EDGE_TRAINSTOP;
331
} else if (!toContainerStop.empty()) {
332
return GNE_TAG_PERSONTRIP_EDGE_CONTAINERSTOP;
333
} else if (!toChargingStation.empty()) {
334
return GNE_TAG_PERSONTRIP_EDGE_CHARGINGSTATION;
335
} else if (!toParkingArea.empty()) {
336
return GNE_TAG_PERSONTRIP_EDGE_PARKINGAREA;
337
} else {
338
return SUMO_TAG_NOTHING;
339
}
340
} else if (!fromTAZ.empty()) {
341
if (!toEdge.empty()) {
342
return GNE_TAG_PERSONTRIP_TAZ_EDGE;
343
} else if (!toTAZ.empty()) {
344
return GNE_TAG_PERSONTRIP_TAZ_TAZ;
345
} else if (!toJunction.empty()) {
346
return GNE_TAG_PERSONTRIP_TAZ_JUNCTION;
347
} else if (!toBusStop.empty()) {
348
return GNE_TAG_PERSONTRIP_TAZ_BUSSTOP;
349
} else if (!toTrainStop.empty()) {
350
return GNE_TAG_PERSONTRIP_TAZ_TRAINSTOP;
351
} else if (!toContainerStop.empty()) {
352
return GNE_TAG_PERSONTRIP_TAZ_CONTAINERSTOP;
353
} else if (!toChargingStation.empty()) {
354
return GNE_TAG_PERSONTRIP_TAZ_CHARGINGSTATION;
355
} else if (!toParkingArea.empty()) {
356
return GNE_TAG_PERSONTRIP_TAZ_PARKINGAREA;
357
} else {
358
return SUMO_TAG_NOTHING;
359
}
360
} else if (!fromJunction.empty()) {
361
if (!toEdge.empty()) {
362
return GNE_TAG_PERSONTRIP_JUNCTION_EDGE;
363
} else if (!toTAZ.empty()) {
364
return GNE_TAG_PERSONTRIP_JUNCTION_TAZ;
365
} else if (!toJunction.empty()) {
366
return GNE_TAG_PERSONTRIP_JUNCTION_JUNCTION;
367
} else if (!toBusStop.empty()) {
368
return GNE_TAG_PERSONTRIP_JUNCTION_BUSSTOP;
369
} else if (!toTrainStop.empty()) {
370
return GNE_TAG_PERSONTRIP_JUNCTION_TRAINSTOP;
371
} else if (!toContainerStop.empty()) {
372
return GNE_TAG_PERSONTRIP_JUNCTION_CONTAINERSTOP;
373
} else if (!toChargingStation.empty()) {
374
return GNE_TAG_PERSONTRIP_JUNCTION_CHARGINGSTATION;
375
} else if (!toParkingArea.empty()) {
376
return GNE_TAG_PERSONTRIP_JUNCTION_PARKINGAREA;
377
} else {
378
return SUMO_TAG_NOTHING;
379
}
380
} else if (!fromBusStop.empty()) {
381
if (!toEdge.empty()) {
382
return GNE_TAG_PERSONTRIP_BUSSTOP_EDGE;
383
} else if (!toTAZ.empty()) {
384
return GNE_TAG_PERSONTRIP_BUSSTOP_TAZ;
385
} else if (!toJunction.empty()) {
386
return GNE_TAG_PERSONTRIP_BUSSTOP_JUNCTION;
387
} else if (!toBusStop.empty()) {
388
return GNE_TAG_PERSONTRIP_BUSSTOP_BUSSTOP;
389
} else if (!toTrainStop.empty()) {
390
return GNE_TAG_PERSONTRIP_BUSSTOP_TRAINSTOP;
391
} else if (!toContainerStop.empty()) {
392
return GNE_TAG_PERSONTRIP_BUSSTOP_CONTAINERSTOP;
393
} else if (!toChargingStation.empty()) {
394
return GNE_TAG_PERSONTRIP_BUSSTOP_CHARGINGSTATION;
395
} else if (!toParkingArea.empty()) {
396
return GNE_TAG_PERSONTRIP_BUSSTOP_PARKINGAREA;
397
} else {
398
return SUMO_TAG_NOTHING;
399
}
400
} else if (!fromTrainStop.empty()) {
401
if (!toEdge.empty()) {
402
return GNE_TAG_PERSONTRIP_TRAINSTOP_EDGE;
403
} else if (!toTAZ.empty()) {
404
return GNE_TAG_PERSONTRIP_TRAINSTOP_TAZ;
405
} else if (!toJunction.empty()) {
406
return GNE_TAG_PERSONTRIP_TRAINSTOP_JUNCTION;
407
} else if (!toBusStop.empty()) {
408
return GNE_TAG_PERSONTRIP_TRAINSTOP_BUSSTOP;
409
} else if (!toTrainStop.empty()) {
410
return GNE_TAG_PERSONTRIP_TRAINSTOP_TRAINSTOP;
411
} else if (!toContainerStop.empty()) {
412
return GNE_TAG_PERSONTRIP_TRAINSTOP_CONTAINERSTOP;
413
} else if (!toChargingStation.empty()) {
414
return GNE_TAG_PERSONTRIP_TRAINSTOP_CHARGINGSTATION;
415
} else if (!toParkingArea.empty()) {
416
return GNE_TAG_PERSONTRIP_TRAINSTOP_PARKINGAREA;
417
} else {
418
return SUMO_TAG_NOTHING;
419
}
420
} else if (!fromContainerStop.empty()) {
421
if (!toEdge.empty()) {
422
return GNE_TAG_PERSONTRIP_CONTAINERSTOP_EDGE;
423
} else if (!toTAZ.empty()) {
424
return GNE_TAG_PERSONTRIP_CONTAINERSTOP_TAZ;
425
} else if (!toJunction.empty()) {
426
return GNE_TAG_PERSONTRIP_CONTAINERSTOP_JUNCTION;
427
} else if (!toBusStop.empty()) {
428
return GNE_TAG_PERSONTRIP_CONTAINERSTOP_BUSSTOP;
429
} else if (!toTrainStop.empty()) {
430
return GNE_TAG_PERSONTRIP_CONTAINERSTOP_TRAINSTOP;
431
} else if (!toContainerStop.empty()) {
432
return GNE_TAG_PERSONTRIP_CONTAINERSTOP_CONTAINERSTOP;
433
} else if (!toChargingStation.empty()) {
434
return GNE_TAG_PERSONTRIP_CONTAINERSTOP_CHARGINGSTATION;
435
} else if (!toParkingArea.empty()) {
436
return GNE_TAG_PERSONTRIP_CONTAINERSTOP_PARKINGAREA;
437
} else {
438
return SUMO_TAG_NOTHING;
439
}
440
} else if (!fromChargingStation.empty()) {
441
if (!toEdge.empty()) {
442
return GNE_TAG_PERSONTRIP_CHARGINGSTATION_EDGE;
443
} else if (!toTAZ.empty()) {
444
return GNE_TAG_PERSONTRIP_CHARGINGSTATION_TAZ;
445
} else if (!toJunction.empty()) {
446
return GNE_TAG_PERSONTRIP_CHARGINGSTATION_JUNCTION;
447
} else if (!toBusStop.empty()) {
448
return GNE_TAG_PERSONTRIP_CHARGINGSTATION_BUSSTOP;
449
} else if (!toTrainStop.empty()) {
450
return GNE_TAG_PERSONTRIP_CHARGINGSTATION_TRAINSTOP;
451
} else if (!toContainerStop.empty()) {
452
return GNE_TAG_PERSONTRIP_CHARGINGSTATION_CONTAINERSTOP;
453
} else if (!toChargingStation.empty()) {
454
return GNE_TAG_PERSONTRIP_CHARGINGSTATION_CHARGINGSTATION;
455
} else if (!toParkingArea.empty()) {
456
return GNE_TAG_PERSONTRIP_CHARGINGSTATION_PARKINGAREA;
457
} else {
458
return SUMO_TAG_NOTHING;
459
}
460
} else if (!fromParkingArea.empty()) {
461
if (!toEdge.empty()) {
462
return GNE_TAG_PERSONTRIP_PARKINGAREA_EDGE;
463
} else if (!toTAZ.empty()) {
464
return GNE_TAG_PERSONTRIP_PARKINGAREA_TAZ;
465
} else if (!toJunction.empty()) {
466
return GNE_TAG_PERSONTRIP_PARKINGAREA_JUNCTION;
467
} else if (!toBusStop.empty()) {
468
return GNE_TAG_PERSONTRIP_PARKINGAREA_BUSSTOP;
469
} else if (!toTrainStop.empty()) {
470
return GNE_TAG_PERSONTRIP_PARKINGAREA_TRAINSTOP;
471
} else if (!toContainerStop.empty()) {
472
return GNE_TAG_PERSONTRIP_PARKINGAREA_CONTAINERSTOP;
473
} else if (!toChargingStation.empty()) {
474
return GNE_TAG_PERSONTRIP_PARKINGAREA_CHARGINGSTATION;
475
} else if (!toParkingArea.empty()) {
476
return GNE_TAG_PERSONTRIP_PARKINGAREA_PARKINGAREA;
477
} else {
478
return SUMO_TAG_NOTHING;
479
}
480
} else {
481
return SUMO_TAG_NOTHING;
482
}
483
}
484
485
486
SumoXMLTag
487
CommonXMLStructure::PlanParameters::getRideTag() const {
488
if (isSingleEdgePlan()) {
489
return GNE_TAG_RIDE_EDGE_EDGE;
490
} else if (!fromEdge.empty()) {
491
if (!toEdge.empty()) {
492
return GNE_TAG_RIDE_EDGE_EDGE;
493
} else if (!toTAZ.empty()) {
494
return GNE_TAG_RIDE_EDGE_TAZ;
495
} else if (!toJunction.empty()) {
496
return GNE_TAG_RIDE_EDGE_JUNCTION;
497
} else if (!toBusStop.empty()) {
498
return GNE_TAG_RIDE_EDGE_BUSSTOP;
499
} else if (!toTrainStop.empty()) {
500
return GNE_TAG_RIDE_EDGE_TRAINSTOP;
501
} else if (!toContainerStop.empty()) {
502
return GNE_TAG_RIDE_EDGE_CONTAINERSTOP;
503
} else if (!toChargingStation.empty()) {
504
return GNE_TAG_RIDE_EDGE_CHARGINGSTATION;
505
} else if (!toParkingArea.empty()) {
506
return GNE_TAG_RIDE_EDGE_PARKINGAREA;
507
} else {
508
return SUMO_TAG_NOTHING;
509
}
510
} else if (!fromTAZ.empty()) {
511
if (!toEdge.empty()) {
512
return GNE_TAG_RIDE_TAZ_EDGE;
513
} else if (!toTAZ.empty()) {
514
return GNE_TAG_RIDE_TAZ_TAZ;
515
} else if (!toJunction.empty()) {
516
return GNE_TAG_RIDE_TAZ_JUNCTION;
517
} else if (!toBusStop.empty()) {
518
return GNE_TAG_RIDE_TAZ_BUSSTOP;
519
} else if (!toTrainStop.empty()) {
520
return GNE_TAG_RIDE_TAZ_TRAINSTOP;
521
} else if (!toContainerStop.empty()) {
522
return GNE_TAG_RIDE_TAZ_CONTAINERSTOP;
523
} else if (!toChargingStation.empty()) {
524
return GNE_TAG_RIDE_TAZ_CHARGINGSTATION;
525
} else if (!toParkingArea.empty()) {
526
return GNE_TAG_RIDE_TAZ_PARKINGAREA;
527
} else {
528
return SUMO_TAG_NOTHING;
529
}
530
} else if (!fromJunction.empty()) {
531
if (!toEdge.empty()) {
532
return GNE_TAG_RIDE_JUNCTION_EDGE;
533
} else if (!toTAZ.empty()) {
534
return GNE_TAG_RIDE_JUNCTION_TAZ;
535
} else if (!toJunction.empty()) {
536
return GNE_TAG_RIDE_JUNCTION_JUNCTION;
537
} else if (!toBusStop.empty()) {
538
return GNE_TAG_RIDE_JUNCTION_BUSSTOP;
539
} else if (!toTrainStop.empty()) {
540
return GNE_TAG_RIDE_JUNCTION_TRAINSTOP;
541
} else if (!toContainerStop.empty()) {
542
return GNE_TAG_RIDE_JUNCTION_CONTAINERSTOP;
543
} else if (!toChargingStation.empty()) {
544
return GNE_TAG_RIDE_JUNCTION_CHARGINGSTATION;
545
} else if (!toParkingArea.empty()) {
546
return GNE_TAG_RIDE_JUNCTION_PARKINGAREA;
547
} else {
548
return SUMO_TAG_NOTHING;
549
}
550
} else if (!fromBusStop.empty()) {
551
if (!toEdge.empty()) {
552
return GNE_TAG_RIDE_BUSSTOP_EDGE;
553
} else if (!toTAZ.empty()) {
554
return GNE_TAG_RIDE_BUSSTOP_TAZ;
555
} else if (!toJunction.empty()) {
556
return GNE_TAG_RIDE_BUSSTOP_JUNCTION;
557
} else if (!toBusStop.empty()) {
558
return GNE_TAG_RIDE_BUSSTOP_BUSSTOP;
559
} else if (!toTrainStop.empty()) {
560
return GNE_TAG_RIDE_BUSSTOP_TRAINSTOP;
561
} else if (!toContainerStop.empty()) {
562
return GNE_TAG_RIDE_BUSSTOP_CONTAINERSTOP;
563
} else if (!toChargingStation.empty()) {
564
return GNE_TAG_RIDE_BUSSTOP_CHARGINGSTATION;
565
} else if (!toParkingArea.empty()) {
566
return GNE_TAG_RIDE_BUSSTOP_PARKINGAREA;
567
} else {
568
return SUMO_TAG_NOTHING;
569
}
570
} else if (!fromTrainStop.empty()) {
571
if (!toEdge.empty()) {
572
return GNE_TAG_RIDE_TRAINSTOP_EDGE;
573
} else if (!toTAZ.empty()) {
574
return GNE_TAG_RIDE_TRAINSTOP_TAZ;
575
} else if (!toJunction.empty()) {
576
return GNE_TAG_RIDE_TRAINSTOP_JUNCTION;
577
} else if (!toBusStop.empty()) {
578
return GNE_TAG_RIDE_TRAINSTOP_BUSSTOP;
579
} else if (!toTrainStop.empty()) {
580
return GNE_TAG_RIDE_TRAINSTOP_TRAINSTOP;
581
} else if (!toContainerStop.empty()) {
582
return GNE_TAG_RIDE_TRAINSTOP_CONTAINERSTOP;
583
} else if (!toChargingStation.empty()) {
584
return GNE_TAG_RIDE_TRAINSTOP_CHARGINGSTATION;
585
} else if (!toParkingArea.empty()) {
586
return GNE_TAG_RIDE_TRAINSTOP_PARKINGAREA;
587
} else {
588
return SUMO_TAG_NOTHING;
589
}
590
} else if (!fromContainerStop.empty()) {
591
if (!toEdge.empty()) {
592
return GNE_TAG_RIDE_CONTAINERSTOP_EDGE;
593
} else if (!toTAZ.empty()) {
594
return GNE_TAG_RIDE_CONTAINERSTOP_TAZ;
595
} else if (!toJunction.empty()) {
596
return GNE_TAG_RIDE_CONTAINERSTOP_JUNCTION;
597
} else if (!toBusStop.empty()) {
598
return GNE_TAG_RIDE_CONTAINERSTOP_BUSSTOP;
599
} else if (!toTrainStop.empty()) {
600
return GNE_TAG_RIDE_CONTAINERSTOP_TRAINSTOP;
601
} else if (!toContainerStop.empty()) {
602
return GNE_TAG_RIDE_CONTAINERSTOP_CONTAINERSTOP;
603
} else if (!toChargingStation.empty()) {
604
return GNE_TAG_RIDE_CONTAINERSTOP_CHARGINGSTATION;
605
} else if (!toParkingArea.empty()) {
606
return GNE_TAG_RIDE_CONTAINERSTOP_PARKINGAREA;
607
} else {
608
return SUMO_TAG_NOTHING;
609
}
610
} else if (!fromChargingStation.empty()) {
611
if (!toEdge.empty()) {
612
return GNE_TAG_RIDE_CHARGINGSTATION_EDGE;
613
} else if (!toTAZ.empty()) {
614
return GNE_TAG_RIDE_CHARGINGSTATION_TAZ;
615
} else if (!toJunction.empty()) {
616
return GNE_TAG_RIDE_CHARGINGSTATION_JUNCTION;
617
} else if (!toBusStop.empty()) {
618
return GNE_TAG_RIDE_CHARGINGSTATION_BUSSTOP;
619
} else if (!toTrainStop.empty()) {
620
return GNE_TAG_RIDE_CHARGINGSTATION_TRAINSTOP;
621
} else if (!toContainerStop.empty()) {
622
return GNE_TAG_RIDE_CHARGINGSTATION_CONTAINERSTOP;
623
} else if (!toChargingStation.empty()) {
624
return GNE_TAG_RIDE_CHARGINGSTATION_CHARGINGSTATION;
625
} else if (!toParkingArea.empty()) {
626
return GNE_TAG_RIDE_CHARGINGSTATION_PARKINGAREA;
627
} else {
628
return SUMO_TAG_NOTHING;
629
}
630
} else if (!fromParkingArea.empty()) {
631
if (!toEdge.empty()) {
632
return GNE_TAG_RIDE_PARKINGAREA_EDGE;
633
} else if (!toTAZ.empty()) {
634
return GNE_TAG_RIDE_PARKINGAREA_TAZ;
635
} else if (!toJunction.empty()) {
636
return GNE_TAG_RIDE_PARKINGAREA_JUNCTION;
637
} else if (!toBusStop.empty()) {
638
return GNE_TAG_RIDE_PARKINGAREA_BUSSTOP;
639
} else if (!toTrainStop.empty()) {
640
return GNE_TAG_RIDE_PARKINGAREA_TRAINSTOP;
641
} else if (!toContainerStop.empty()) {
642
return GNE_TAG_RIDE_PARKINGAREA_CONTAINERSTOP;
643
} else if (!toChargingStation.empty()) {
644
return GNE_TAG_RIDE_PARKINGAREA_CHARGINGSTATION;
645
} else if (!toParkingArea.empty()) {
646
return GNE_TAG_RIDE_PARKINGAREA_PARKINGAREA;
647
} else {
648
return SUMO_TAG_NOTHING;
649
}
650
} else {
651
return SUMO_TAG_NOTHING;
652
}
653
}
654
655
656
SumoXMLTag
657
CommonXMLStructure::PlanParameters::getTransportTag() const {
658
if (isSingleEdgePlan()) {
659
return GNE_TAG_TRANSPORT_EDGE_EDGE;
660
} else if (!fromEdge.empty()) {
661
if (!toEdge.empty()) {
662
return GNE_TAG_TRANSPORT_EDGE_EDGE;
663
} else if (!toTAZ.empty()) {
664
return GNE_TAG_TRANSPORT_EDGE_TAZ;
665
} else if (!toJunction.empty()) {
666
return GNE_TAG_TRANSPORT_EDGE_JUNCTION;
667
} else if (!toBusStop.empty()) {
668
return GNE_TAG_TRANSPORT_EDGE_BUSSTOP;
669
} else if (!toTrainStop.empty()) {
670
return GNE_TAG_TRANSPORT_EDGE_TRAINSTOP;
671
} else if (!toContainerStop.empty()) {
672
return GNE_TAG_TRANSPORT_EDGE_CONTAINERSTOP;
673
} else if (!toChargingStation.empty()) {
674
return GNE_TAG_TRANSPORT_EDGE_CHARGINGSTATION;
675
} else if (!toParkingArea.empty()) {
676
return GNE_TAG_TRANSPORT_EDGE_PARKINGAREA;
677
} else {
678
return SUMO_TAG_NOTHING;
679
}
680
} else if (!fromTAZ.empty()) {
681
if (!toEdge.empty()) {
682
return GNE_TAG_TRANSPORT_TAZ_EDGE;
683
} else if (!toTAZ.empty()) {
684
return GNE_TAG_TRANSPORT_TAZ_TAZ;
685
} else if (!toJunction.empty()) {
686
return GNE_TAG_TRANSPORT_TAZ_JUNCTION;
687
} else if (!toBusStop.empty()) {
688
return GNE_TAG_TRANSPORT_TAZ_BUSSTOP;
689
} else if (!toTrainStop.empty()) {
690
return GNE_TAG_TRANSPORT_TAZ_TRAINSTOP;
691
} else if (!toContainerStop.empty()) {
692
return GNE_TAG_TRANSPORT_TAZ_CONTAINERSTOP;
693
} else if (!toChargingStation.empty()) {
694
return GNE_TAG_TRANSPORT_TAZ_CHARGINGSTATION;
695
} else if (!toParkingArea.empty()) {
696
return GNE_TAG_TRANSPORT_TAZ_PARKINGAREA;
697
} else {
698
return SUMO_TAG_NOTHING;
699
}
700
} else if (!fromJunction.empty()) {
701
if (!toEdge.empty()) {
702
return GNE_TAG_TRANSPORT_JUNCTION_EDGE;
703
} else if (!toTAZ.empty()) {
704
return GNE_TAG_TRANSPORT_JUNCTION_TAZ;
705
} else if (!toJunction.empty()) {
706
return GNE_TAG_TRANSPORT_JUNCTION_JUNCTION;
707
} else if (!toBusStop.empty()) {
708
return GNE_TAG_TRANSPORT_JUNCTION_BUSSTOP;
709
} else if (!toTrainStop.empty()) {
710
return GNE_TAG_TRANSPORT_JUNCTION_TRAINSTOP;
711
} else if (!toContainerStop.empty()) {
712
return GNE_TAG_TRANSPORT_JUNCTION_CONTAINERSTOP;
713
} else if (!toChargingStation.empty()) {
714
return GNE_TAG_TRANSPORT_JUNCTION_CHARGINGSTATION;
715
} else if (!toParkingArea.empty()) {
716
return GNE_TAG_TRANSPORT_JUNCTION_PARKINGAREA;
717
} else {
718
return SUMO_TAG_NOTHING;
719
}
720
} else if (!fromBusStop.empty()) {
721
if (!toEdge.empty()) {
722
return GNE_TAG_TRANSPORT_BUSSTOP_EDGE;
723
} else if (!toTAZ.empty()) {
724
return GNE_TAG_TRANSPORT_BUSSTOP_TAZ;
725
} else if (!toJunction.empty()) {
726
return GNE_TAG_TRANSPORT_BUSSTOP_JUNCTION;
727
} else if (!toBusStop.empty()) {
728
return GNE_TAG_TRANSPORT_BUSSTOP_BUSSTOP;
729
} else if (!toTrainStop.empty()) {
730
return GNE_TAG_TRANSPORT_BUSSTOP_TRAINSTOP;
731
} else if (!toContainerStop.empty()) {
732
return GNE_TAG_TRANSPORT_BUSSTOP_CONTAINERSTOP;
733
} else if (!toChargingStation.empty()) {
734
return GNE_TAG_TRANSPORT_BUSSTOP_CHARGINGSTATION;
735
} else if (!toParkingArea.empty()) {
736
return GNE_TAG_TRANSPORT_BUSSTOP_PARKINGAREA;
737
} else {
738
return SUMO_TAG_NOTHING;
739
}
740
} else if (!fromTrainStop.empty()) {
741
if (!toEdge.empty()) {
742
return GNE_TAG_TRANSPORT_TRAINSTOP_EDGE;
743
} else if (!toTAZ.empty()) {
744
return GNE_TAG_TRANSPORT_TRAINSTOP_TAZ;
745
} else if (!toJunction.empty()) {
746
return GNE_TAG_TRANSPORT_TRAINSTOP_JUNCTION;
747
} else if (!toBusStop.empty()) {
748
return GNE_TAG_TRANSPORT_TRAINSTOP_BUSSTOP;
749
} else if (!toTrainStop.empty()) {
750
return GNE_TAG_TRANSPORT_TRAINSTOP_TRAINSTOP;
751
} else if (!toContainerStop.empty()) {
752
return GNE_TAG_TRANSPORT_TRAINSTOP_CONTAINERSTOP;
753
} else if (!toChargingStation.empty()) {
754
return GNE_TAG_TRANSPORT_TRAINSTOP_CHARGINGSTATION;
755
} else if (!toParkingArea.empty()) {
756
return GNE_TAG_TRANSPORT_TRAINSTOP_PARKINGAREA;
757
} else {
758
return SUMO_TAG_NOTHING;
759
}
760
} else if (!fromContainerStop.empty()) {
761
if (!toEdge.empty()) {
762
return GNE_TAG_TRANSPORT_CONTAINERSTOP_EDGE;
763
} else if (!toTAZ.empty()) {
764
return GNE_TAG_TRANSPORT_CONTAINERSTOP_TAZ;
765
} else if (!toJunction.empty()) {
766
return GNE_TAG_TRANSPORT_CONTAINERSTOP_JUNCTION;
767
} else if (!toBusStop.empty()) {
768
return GNE_TAG_TRANSPORT_CONTAINERSTOP_BUSSTOP;
769
} else if (!toTrainStop.empty()) {
770
return GNE_TAG_TRANSPORT_CONTAINERSTOP_TRAINSTOP;
771
} else if (!toContainerStop.empty()) {
772
return GNE_TAG_TRANSPORT_CONTAINERSTOP_CONTAINERSTOP;
773
} else if (!toChargingStation.empty()) {
774
return GNE_TAG_TRANSPORT_CONTAINERSTOP_CHARGINGSTATION;
775
} else if (!toParkingArea.empty()) {
776
return GNE_TAG_TRANSPORT_CONTAINERSTOP_PARKINGAREA;
777
} else {
778
return SUMO_TAG_NOTHING;
779
}
780
} else if (!fromChargingStation.empty()) {
781
if (!toEdge.empty()) {
782
return GNE_TAG_TRANSPORT_CHARGINGSTATION_EDGE;
783
} else if (!toTAZ.empty()) {
784
return GNE_TAG_TRANSPORT_CHARGINGSTATION_TAZ;
785
} else if (!toJunction.empty()) {
786
return GNE_TAG_TRANSPORT_CHARGINGSTATION_JUNCTION;
787
} else if (!toBusStop.empty()) {
788
return GNE_TAG_TRANSPORT_CHARGINGSTATION_BUSSTOP;
789
} else if (!toTrainStop.empty()) {
790
return GNE_TAG_TRANSPORT_CHARGINGSTATION_TRAINSTOP;
791
} else if (!toContainerStop.empty()) {
792
return GNE_TAG_TRANSPORT_CHARGINGSTATION_CONTAINERSTOP;
793
} else if (!toChargingStation.empty()) {
794
return GNE_TAG_TRANSPORT_CHARGINGSTATION_CHARGINGSTATION;
795
} else if (!toParkingArea.empty()) {
796
return GNE_TAG_TRANSPORT_CHARGINGSTATION_PARKINGAREA;
797
} else {
798
return SUMO_TAG_NOTHING;
799
}
800
} else if (!fromParkingArea.empty()) {
801
if (!toEdge.empty()) {
802
return GNE_TAG_TRANSPORT_PARKINGAREA_EDGE;
803
} else if (!toTAZ.empty()) {
804
return GNE_TAG_TRANSPORT_PARKINGAREA_TAZ;
805
} else if (!toJunction.empty()) {
806
return GNE_TAG_TRANSPORT_PARKINGAREA_JUNCTION;
807
} else if (!toBusStop.empty()) {
808
return GNE_TAG_TRANSPORT_PARKINGAREA_BUSSTOP;
809
} else if (!toTrainStop.empty()) {
810
return GNE_TAG_TRANSPORT_PARKINGAREA_TRAINSTOP;
811
} else if (!toContainerStop.empty()) {
812
return GNE_TAG_TRANSPORT_PARKINGAREA_CONTAINERSTOP;
813
} else if (!toChargingStation.empty()) {
814
return GNE_TAG_TRANSPORT_PARKINGAREA_CHARGINGSTATION;
815
} else if (!toParkingArea.empty()) {
816
return GNE_TAG_TRANSPORT_PARKINGAREA_PARKINGAREA;
817
} else {
818
return SUMO_TAG_NOTHING;
819
}
820
} else {
821
return SUMO_TAG_NOTHING;
822
}
823
}
824
825
826
SumoXMLTag
827
CommonXMLStructure::PlanParameters::getTranshipTag() const {
828
if (isSingleEdgePlan()) {
829
return GNE_TAG_TRANSHIP_EDGE_EDGE;
830
} else if (consecutiveEdges.size() > 0) {
831
return GNE_TAG_TRANSHIP_EDGES;
832
} else if (!fromEdge.empty()) {
833
if (!toEdge.empty()) {
834
return GNE_TAG_TRANSHIP_EDGE_EDGE;
835
} else if (!toTAZ.empty()) {
836
return GNE_TAG_TRANSHIP_EDGE_TAZ;
837
} else if (!toJunction.empty()) {
838
return GNE_TAG_TRANSHIP_EDGE_JUNCTION;
839
} else if (!toBusStop.empty()) {
840
return GNE_TAG_TRANSHIP_EDGE_BUSSTOP;
841
} else if (!toTrainStop.empty()) {
842
return GNE_TAG_TRANSHIP_EDGE_TRAINSTOP;
843
} else if (!toContainerStop.empty()) {
844
return GNE_TAG_TRANSHIP_EDGE_CONTAINERSTOP;
845
} else if (!toChargingStation.empty()) {
846
return GNE_TAG_TRANSHIP_EDGE_CHARGINGSTATION;
847
} else if (!toParkingArea.empty()) {
848
return GNE_TAG_TRANSHIP_EDGE_PARKINGAREA;
849
} else {
850
return SUMO_TAG_NOTHING;
851
}
852
} else if (!fromTAZ.empty()) {
853
if (!toEdge.empty()) {
854
return GNE_TAG_TRANSHIP_TAZ_EDGE;
855
} else if (!toTAZ.empty()) {
856
return GNE_TAG_TRANSHIP_TAZ_TAZ;
857
} else if (!toJunction.empty()) {
858
return GNE_TAG_TRANSHIP_TAZ_JUNCTION;
859
} else if (!toBusStop.empty()) {
860
return GNE_TAG_TRANSHIP_TAZ_BUSSTOP;
861
} else if (!toTrainStop.empty()) {
862
return GNE_TAG_TRANSHIP_TAZ_TRAINSTOP;
863
} else if (!toContainerStop.empty()) {
864
return GNE_TAG_TRANSHIP_TAZ_CONTAINERSTOP;
865
} else if (!toChargingStation.empty()) {
866
return GNE_TAG_TRANSHIP_TAZ_CHARGINGSTATION;
867
} else if (!toParkingArea.empty()) {
868
return GNE_TAG_TRANSHIP_TAZ_PARKINGAREA;
869
} else {
870
return SUMO_TAG_NOTHING;
871
}
872
} else if (!fromJunction.empty()) {
873
if (!toEdge.empty()) {
874
return GNE_TAG_TRANSHIP_JUNCTION_EDGE;
875
} else if (!toTAZ.empty()) {
876
return GNE_TAG_TRANSHIP_JUNCTION_TAZ;
877
} else if (!toJunction.empty()) {
878
return GNE_TAG_TRANSHIP_JUNCTION_JUNCTION;
879
} else if (!toBusStop.empty()) {
880
return GNE_TAG_TRANSHIP_JUNCTION_BUSSTOP;
881
} else if (!toTrainStop.empty()) {
882
return GNE_TAG_TRANSHIP_JUNCTION_TRAINSTOP;
883
} else if (!toContainerStop.empty()) {
884
return GNE_TAG_TRANSHIP_JUNCTION_CONTAINERSTOP;
885
} else if (!toChargingStation.empty()) {
886
return GNE_TAG_TRANSHIP_JUNCTION_CHARGINGSTATION;
887
} else if (!toParkingArea.empty()) {
888
return GNE_TAG_TRANSHIP_JUNCTION_PARKINGAREA;
889
} else {
890
return SUMO_TAG_NOTHING;
891
}
892
} else if (!fromBusStop.empty()) {
893
if (!toEdge.empty()) {
894
return GNE_TAG_TRANSHIP_BUSSTOP_EDGE;
895
} else if (!toTAZ.empty()) {
896
return GNE_TAG_TRANSHIP_BUSSTOP_TAZ;
897
} else if (!toJunction.empty()) {
898
return GNE_TAG_TRANSHIP_BUSSTOP_JUNCTION;
899
} else if (!toBusStop.empty()) {
900
return GNE_TAG_TRANSHIP_BUSSTOP_BUSSTOP;
901
} else if (!toTrainStop.empty()) {
902
return GNE_TAG_TRANSHIP_BUSSTOP_TRAINSTOP;
903
} else if (!toContainerStop.empty()) {
904
return GNE_TAG_TRANSHIP_BUSSTOP_CONTAINERSTOP;
905
} else if (!toChargingStation.empty()) {
906
return GNE_TAG_TRANSHIP_BUSSTOP_CHARGINGSTATION;
907
} else if (!toParkingArea.empty()) {
908
return GNE_TAG_TRANSHIP_BUSSTOP_PARKINGAREA;
909
} else {
910
return SUMO_TAG_NOTHING;
911
}
912
} else if (!fromTrainStop.empty()) {
913
if (!toEdge.empty()) {
914
return GNE_TAG_TRANSHIP_TRAINSTOP_EDGE;
915
} else if (!toTAZ.empty()) {
916
return GNE_TAG_TRANSHIP_TRAINSTOP_TAZ;
917
} else if (!toJunction.empty()) {
918
return GNE_TAG_TRANSHIP_TRAINSTOP_JUNCTION;
919
} else if (!toBusStop.empty()) {
920
return GNE_TAG_TRANSHIP_TRAINSTOP_BUSSTOP;
921
} else if (!toTrainStop.empty()) {
922
return GNE_TAG_TRANSHIP_TRAINSTOP_TRAINSTOP;
923
} else if (!toContainerStop.empty()) {
924
return GNE_TAG_TRANSHIP_TRAINSTOP_CONTAINERSTOP;
925
} else if (!toChargingStation.empty()) {
926
return GNE_TAG_TRANSHIP_TRAINSTOP_CHARGINGSTATION;
927
} else if (!toParkingArea.empty()) {
928
return GNE_TAG_TRANSHIP_TRAINSTOP_PARKINGAREA;
929
} else {
930
return SUMO_TAG_NOTHING;
931
}
932
} else if (!fromContainerStop.empty()) {
933
if (!toEdge.empty()) {
934
return GNE_TAG_TRANSHIP_CONTAINERSTOP_EDGE;
935
} else if (!toTAZ.empty()) {
936
return GNE_TAG_TRANSHIP_CONTAINERSTOP_TAZ;
937
} else if (!toJunction.empty()) {
938
return GNE_TAG_TRANSHIP_CONTAINERSTOP_JUNCTION;
939
} else if (!toBusStop.empty()) {
940
return GNE_TAG_TRANSHIP_CONTAINERSTOP_BUSSTOP;
941
} else if (!toTrainStop.empty()) {
942
return GNE_TAG_TRANSHIP_CONTAINERSTOP_TRAINSTOP;
943
} else if (!toContainerStop.empty()) {
944
return GNE_TAG_TRANSHIP_CONTAINERSTOP_CONTAINERSTOP;
945
} else if (!toChargingStation.empty()) {
946
return GNE_TAG_TRANSHIP_CONTAINERSTOP_CHARGINGSTATION;
947
} else if (!toParkingArea.empty()) {
948
return GNE_TAG_TRANSHIP_CONTAINERSTOP_PARKINGAREA;
949
} else {
950
return SUMO_TAG_NOTHING;
951
}
952
} else if (!fromChargingStation.empty()) {
953
if (!toEdge.empty()) {
954
return GNE_TAG_TRANSHIP_CHARGINGSTATION_EDGE;
955
} else if (!toTAZ.empty()) {
956
return GNE_TAG_TRANSHIP_CHARGINGSTATION_TAZ;
957
} else if (!toJunction.empty()) {
958
return GNE_TAG_TRANSHIP_CHARGINGSTATION_JUNCTION;
959
} else if (!toBusStop.empty()) {
960
return GNE_TAG_TRANSHIP_CHARGINGSTATION_BUSSTOP;
961
} else if (!toTrainStop.empty()) {
962
return GNE_TAG_TRANSHIP_CHARGINGSTATION_TRAINSTOP;
963
} else if (!toContainerStop.empty()) {
964
return GNE_TAG_TRANSHIP_CHARGINGSTATION_CONTAINERSTOP;
965
} else if (!toChargingStation.empty()) {
966
return GNE_TAG_TRANSHIP_CHARGINGSTATION_CHARGINGSTATION;
967
} else if (!toParkingArea.empty()) {
968
return GNE_TAG_TRANSHIP_CHARGINGSTATION_PARKINGAREA;
969
} else {
970
return SUMO_TAG_NOTHING;
971
}
972
} else if (!fromParkingArea.empty()) {
973
if (!toEdge.empty()) {
974
return GNE_TAG_TRANSHIP_PARKINGAREA_EDGE;
975
} else if (!toTAZ.empty()) {
976
return GNE_TAG_TRANSHIP_PARKINGAREA_TAZ;
977
} else if (!toJunction.empty()) {
978
return GNE_TAG_TRANSHIP_PARKINGAREA_JUNCTION;
979
} else if (!toBusStop.empty()) {
980
return GNE_TAG_TRANSHIP_PARKINGAREA_BUSSTOP;
981
} else if (!toTrainStop.empty()) {
982
return GNE_TAG_TRANSHIP_PARKINGAREA_TRAINSTOP;
983
} else if (!toContainerStop.empty()) {
984
return GNE_TAG_TRANSHIP_PARKINGAREA_CONTAINERSTOP;
985
} else if (!toChargingStation.empty()) {
986
return GNE_TAG_TRANSHIP_PARKINGAREA_CHARGINGSTATION;
987
} else if (!toParkingArea.empty()) {
988
return GNE_TAG_TRANSHIP_PARKINGAREA_PARKINGAREA;
989
} else {
990
return SUMO_TAG_NOTHING;
991
}
992
} else {
993
return SUMO_TAG_NOTHING;
994
}
995
}
996
997
998
SumoXMLTag
999
CommonXMLStructure::PlanParameters::getPersonStopTag() const {
1000
if (!toEdge.empty()) {
1001
return GNE_TAG_STOPPERSON_EDGE;
1002
} else if (!toBusStop.empty()) {
1003
return GNE_TAG_STOPPERSON_BUSSTOP;
1004
} else if (!toTrainStop.empty()) {
1005
return GNE_TAG_STOPPERSON_TRAINSTOP;
1006
} else if (!toContainerStop.empty()) {
1007
return GNE_TAG_STOPPERSON_CONTAINERSTOP;
1008
} else if (!toChargingStation.empty()) {
1009
return GNE_TAG_STOPPERSON_CHARGINGSTATION;
1010
} else if (!toParkingArea.empty()) {
1011
return GNE_TAG_STOPPERSON_PARKINGAREA;
1012
} else {
1013
return SUMO_TAG_NOTHING;
1014
}
1015
}
1016
1017
1018
SumoXMLTag
1019
CommonXMLStructure::PlanParameters::getContainerStopTag() const {
1020
if (!toEdge.empty()) {
1021
return GNE_TAG_STOPCONTAINER_EDGE;
1022
} else if (!toBusStop.empty()) {
1023
return GNE_TAG_STOPCONTAINER_BUSSTOP;
1024
} else if (!toTrainStop.empty()) {
1025
return GNE_TAG_STOPCONTAINER_TRAINSTOP;
1026
} else if (!toContainerStop.empty()) {
1027
return GNE_TAG_STOPCONTAINER_CONTAINERSTOP;
1028
} else if (!toChargingStation.empty()) {
1029
return GNE_TAG_STOPCONTAINER_CHARGINGSTATION;
1030
} else if (!toParkingArea.empty()) {
1031
return GNE_TAG_STOPCONTAINER_PARKINGAREA;
1032
} else {
1033
return SUMO_TAG_NOTHING;
1034
}
1035
}
1036
1037
1038
1039
const CommonXMLStructure::SumoBaseObject*
1040
CommonXMLStructure::PlanParameters::getPreviousPlanObj(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const {
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
1065
void
1066
CommonXMLStructure::PlanParameters::updateFromAttributes(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) {
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
1117
void
1118
CommonXMLStructure::PlanParameters::resetPreviousFromAttributes(const CommonXMLStructure::SumoBaseObject* previousPlanObj,
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
1147
void
1148
CommonXMLStructure::PlanParameters::writeIgnoringMessage(const CommonXMLStructure::SumoBaseObject* previousPlanObj,
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()),
1153
previousPlanObj->getParentSumoBaseObject()->getStringAttribute(SUMO_ATTR_ID),
1154
newType, newId));
1155
}
1156
1157
// ---------------------------------------------------------------------------
1158
// CommonXMLStructure::SumoBaseObject - methods
1159
// ---------------------------------------------------------------------------
1160
1161
CommonXMLStructure::SumoBaseObject::SumoBaseObject(SumoBaseObject* parent) :
1162
mySumoBaseObjectParent(parent),
1163
myVehicleTypeParameter("") {
1164
// add this SumoBaseObject into parent children
1165
if (mySumoBaseObjectParent) {
1166
mySumoBaseObjectParent->addSumoBaseObjectChild(this);
1167
}
1168
}
1169
1170
1171
CommonXMLStructure::SumoBaseObject::~SumoBaseObject() {
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
1183
void
1184
CommonXMLStructure::SumoBaseObject::clear() {
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
1214
void
1215
CommonXMLStructure::SumoBaseObject::setTag(const SumoXMLTag tag) {
1216
myTag = tag;
1217
}
1218
1219
1220
void
1221
CommonXMLStructure::SumoBaseObject::markAsCreated() {
1222
myWasCreated = true;
1223
}
1224
1225
1226
SumoXMLTag
1227
CommonXMLStructure::SumoBaseObject::getTag() const {
1228
return myTag;
1229
}
1230
1231
1232
bool
1233
CommonXMLStructure::SumoBaseObject::wasCreated() const {
1234
return myWasCreated;
1235
}
1236
1237
1238
CommonXMLStructure::SumoBaseObject*
1239
CommonXMLStructure::SumoBaseObject::getParentSumoBaseObject() const {
1240
return mySumoBaseObjectParent;
1241
}
1242
1243
1244
std::map<std::string, std::string>
1245
CommonXMLStructure::SumoBaseObject::getAllAttributes() const {
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
1281
const std::string&
1282
CommonXMLStructure::SumoBaseObject::getStringAttribute(const SumoXMLAttr attr) const {
1283
if (hasStringAttribute(attr)) {
1284
return myStringAttributes.at(attr);
1285
} else {
1286
handleAttributeError(attr, "string");
1287
throw ProcessError();
1288
}
1289
}
1290
1291
1292
int
1293
CommonXMLStructure::SumoBaseObject::getIntAttribute(const SumoXMLAttr attr) const {
1294
if (hasIntAttribute(attr)) {
1295
return myIntAttributes.at(attr);
1296
} else {
1297
handleAttributeError(attr, "int");
1298
throw ProcessError();
1299
}
1300
}
1301
1302
1303
double
1304
CommonXMLStructure::SumoBaseObject::getDoubleAttribute(const SumoXMLAttr attr) const {
1305
if (hasDoubleAttribute(attr)) {
1306
return myDoubleAttributes.at(attr);
1307
} else {
1308
handleAttributeError(attr, "double");
1309
throw ProcessError();
1310
}
1311
}
1312
1313
1314
bool
1315
CommonXMLStructure::SumoBaseObject::getBoolAttribute(const SumoXMLAttr attr) const {
1316
if (hasBoolAttribute(attr)) {
1317
return myBoolAttributes.at(attr);
1318
} else {
1319
handleAttributeError(attr, "bool");
1320
throw ProcessError();
1321
}
1322
}
1323
1324
1325
const Position&
1326
CommonXMLStructure::SumoBaseObject::getPositionAttribute(const SumoXMLAttr attr) const {
1327
if (hasPositionAttribute(attr)) {
1328
return myPositionAttributes.at(attr);
1329
} else {
1330
handleAttributeError(attr, "position");
1331
throw ProcessError();
1332
}
1333
}
1334
1335
1336
SUMOTime
1337
CommonXMLStructure::SumoBaseObject::getTimeAttribute(const SumoXMLAttr attr) const {
1338
if (hasTimeAttribute(attr)) {
1339
return myTimeAttributes.at(attr);
1340
} else {
1341
handleAttributeError(attr, "time");
1342
throw ProcessError();
1343
}
1344
}
1345
1346
1347
SUMOTime
1348
CommonXMLStructure::SumoBaseObject::getPeriodAttribute() const {
1349
SumoXMLAttr attr = SUMO_ATTR_PERIOD;
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
1364
const RGBColor&
1365
CommonXMLStructure::SumoBaseObject::getColorAttribute(const SumoXMLAttr attr) const {
1366
if (hasColorAttribute(attr)) {
1367
return myColorAttributes.at(attr);
1368
} else {
1369
handleAttributeError(attr, "color");
1370
throw ProcessError();
1371
}
1372
}
1373
1374
1375
const std::vector<std::string>&
1376
CommonXMLStructure::SumoBaseObject::getStringListAttribute(const SumoXMLAttr attr) const {
1377
if (hasStringListAttribute(attr)) {
1378
return myStringListAttributes.at(attr);
1379
} else {
1380
handleAttributeError(attr, "string list");
1381
throw ProcessError();
1382
}
1383
}
1384
1385
1386
const std::vector<double>&
1387
CommonXMLStructure::SumoBaseObject::getDoubleListAttribute(const SumoXMLAttr attr) const {
1388
if (hasDoubleListAttribute(attr)) {
1389
return myDoubleListAttributes.at(attr);
1390
} else {
1391
handleAttributeError(attr, "double list");
1392
throw ProcessError();
1393
}
1394
}
1395
1396
1397
const PositionVector&
1398
CommonXMLStructure::SumoBaseObject::getPositionVectorAttribute(const SumoXMLAttr attr) const {
1399
if (hasPositionVectorAttribute(attr)) {
1400
return myPositionVectorAttributes.at(attr);
1401
} else {
1402
handleAttributeError(attr, "position vector");
1403
throw ProcessError();
1404
}
1405
}
1406
1407
const std::string&
1408
CommonXMLStructure::SumoBaseObject::getParentID(const SumoXMLTag tag) const {
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
1418
SUMOVehicleClass
1419
CommonXMLStructure::SumoBaseObject::getVClass() const {
1420
return myVClass;
1421
}
1422
1423
1424
const SUMOVTypeParameter&
1425
CommonXMLStructure::SumoBaseObject::getVehicleTypeParameter() const {
1426
if (myDefinedVehicleTypeParameter) {
1427
return myVehicleTypeParameter;
1428
} else {
1429
throw ProcessError(TL("Undefined vehicleType parameter"));
1430
}
1431
}
1432
1433
1434
const SUMOVehicleParameter&
1435
CommonXMLStructure::SumoBaseObject::getVehicleParameter() const {
1436
if (myDefinedVehicleParameter) {
1437
return myVehicleParameter;
1438
} else {
1439
throw ProcessError(TL("Undefined vehicle parameter"));
1440
}
1441
}
1442
1443
1444
const SUMOVehicleParameter::Stop&
1445
CommonXMLStructure::SumoBaseObject::getStopParameter() const {
1446
if (myDefinedStopParameter) {
1447
return myStopParameter;
1448
} else {
1449
throw ProcessError(TL("Undefined stop parameter"));
1450
}
1451
1452
}
1453
1454
1455
const std::map<std::string, std::string>&
1456
CommonXMLStructure::SumoBaseObject::getParameters() const {
1457
return myParameters;
1458
}
1459
1460
1461
const CommonXMLStructure::PlanParameters&
1462
CommonXMLStructure::SumoBaseObject::getPlanParameters() const {
1463
return myPlanParameters;
1464
}
1465
1466
1467
const std::vector<CommonXMLStructure::SumoBaseObject*>&
1468
CommonXMLStructure::SumoBaseObject::getSumoBaseObjectChildren() const {
1469
return mySumoBaseObjectChildren;
1470
}
1471
1472
1473
bool
1474
CommonXMLStructure::SumoBaseObject::hasStringAttribute(const SumoXMLAttr attr) const {
1475
return myStringAttributes.count(attr) > 0;
1476
}
1477
1478
1479
bool
1480
CommonXMLStructure::SumoBaseObject::hasIntAttribute(const SumoXMLAttr attr) const {
1481
return myIntAttributes.count(attr) > 0;
1482
}
1483
1484
1485
bool
1486
CommonXMLStructure::SumoBaseObject::hasDoubleAttribute(const SumoXMLAttr attr) const {
1487
return myDoubleAttributes.count(attr) > 0;
1488
}
1489
1490
1491
bool
1492
CommonXMLStructure::SumoBaseObject::hasBoolAttribute(const SumoXMLAttr attr) const {
1493
return myBoolAttributes.count(attr) > 0;
1494
}
1495
1496
1497
bool
1498
CommonXMLStructure::SumoBaseObject::hasPositionAttribute(const SumoXMLAttr attr) const {
1499
return myPositionAttributes.count(attr) > 0;
1500
}
1501
1502
1503
bool
1504
CommonXMLStructure::SumoBaseObject::hasTimeAttribute(const SumoXMLAttr attr) const {
1505
return myTimeAttributes.count(attr) > 0;
1506
}
1507
1508
1509
bool
1510
CommonXMLStructure::SumoBaseObject::hasColorAttribute(const SumoXMLAttr attr) const {
1511
return myColorAttributes.count(attr) > 0;
1512
}
1513
1514
1515
bool
1516
CommonXMLStructure::SumoBaseObject::hasStringListAttribute(const SumoXMLAttr attr) const {
1517
return myStringListAttributes.count(attr) > 0;
1518
}
1519
1520
1521
bool
1522
CommonXMLStructure::SumoBaseObject::hasDoubleListAttribute(const SumoXMLAttr attr) const {
1523
return myDoubleListAttributes.count(attr) > 0;
1524
}
1525
1526
1527
bool
1528
CommonXMLStructure::SumoBaseObject::hasPositionVectorAttribute(const SumoXMLAttr attr) const {
1529
return myPositionVectorAttributes.count(attr) > 0;
1530
}
1531
1532
1533
bool
1534
CommonXMLStructure::SumoBaseObject::hasParentID(const SumoXMLTag tag) const {
1535
return myParentIDs.count(tag) > 0;
1536
}
1537
1538
1539
void
1540
CommonXMLStructure::SumoBaseObject::addStringAttribute(const SumoXMLAttr attr, const std::string& value) {
1541
myStringAttributes[attr] = value;
1542
}
1543
1544
1545
void
1546
CommonXMLStructure::SumoBaseObject::addIntAttribute(const SumoXMLAttr attr, const int value) {
1547
myIntAttributes[attr] = value;
1548
}
1549
1550
1551
void
1552
CommonXMLStructure::SumoBaseObject::addDoubleAttribute(const SumoXMLAttr attr, const double value) {
1553
myDoubleAttributes[attr] = value;
1554
}
1555
1556
1557
void
1558
CommonXMLStructure::SumoBaseObject::addBoolAttribute(const SumoXMLAttr attr, const bool value) {
1559
myBoolAttributes[attr] = value;
1560
}
1561
1562
1563
void
1564
CommonXMLStructure::SumoBaseObject::addPositionAttribute(const SumoXMLAttr attr, const Position& value) {
1565
myPositionAttributes[attr] = value;
1566
}
1567
1568
1569
void
1570
CommonXMLStructure::SumoBaseObject::addTimeAttribute(const SumoXMLAttr attr, const SUMOTime value) {
1571
myTimeAttributes[attr] = value;
1572
}
1573
1574
1575
void
1576
CommonXMLStructure::SumoBaseObject::addColorAttribute(const SumoXMLAttr attr, const RGBColor& value) {
1577
myColorAttributes[attr] = value;
1578
}
1579
1580
1581
void
1582
CommonXMLStructure::SumoBaseObject::addStringListAttribute(const SumoXMLAttr attr, const std::vector<std::string>& value) {
1583
myStringListAttributes[attr] = value;
1584
}
1585
1586
1587
void
1588
CommonXMLStructure::SumoBaseObject::addDoubleListAttribute(const SumoXMLAttr attr, const std::vector<double>& value) {
1589
myDoubleListAttributes[attr] = value;
1590
}
1591
1592
1593
void
1594
CommonXMLStructure::SumoBaseObject::addPositionVectorAttribute(const SumoXMLAttr attr, const PositionVector& value) {
1595
myPositionVectorAttributes[attr] = value;
1596
}
1597
1598
1599
void
1600
CommonXMLStructure::SumoBaseObject::addParentID(const SumoXMLTag tag, const std::string& ID) {
1601
myParentIDs[tag] = ID;
1602
}
1603
1604
1605
void
1606
CommonXMLStructure::SumoBaseObject::addParameters(const std::string& value) {
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
1615
void
1616
CommonXMLStructure::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
1630
void
1631
CommonXMLStructure::SumoBaseObject::setVClass(SUMOVehicleClass vClass) {
1632
myVClass = vClass;
1633
}
1634
1635
1636
void
1637
CommonXMLStructure::SumoBaseObject::setVehicleTypeParameter(const SUMOVTypeParameter* vehicleTypeParameter) {
1638
myVehicleTypeParameter = *vehicleTypeParameter;
1639
myDefinedVehicleTypeParameter = true;
1640
// set attribute id
1641
addStringAttribute(SUMO_ATTR_ID, myVehicleTypeParameter.id);
1642
}
1643
1644
1645
void
1646
CommonXMLStructure::SumoBaseObject::setVehicleParameter(const SUMOVehicleParameter* vehicleParameter) {
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
1660
void
1661
CommonXMLStructure::SumoBaseObject::setStopParameter(const SUMOVehicleParameter::Stop& stopParameter) {
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
1691
void
1692
CommonXMLStructure::SumoBaseObject::setPlanParameters(const CommonXMLStructure::PlanParameters& planParameters) {
1693
myPlanParameters = planParameters;
1694
}
1695
1696
void
1697
CommonXMLStructure::SumoBaseObject::addSumoBaseObjectChild(SumoBaseObject* sumoBaseObject) {
1698
// just add it into mySumoBaseObjectChildren
1699
mySumoBaseObjectChildren.push_back(sumoBaseObject);
1700
}
1701
1702
1703
void
1704
CommonXMLStructure::SumoBaseObject::removeSumoBaseObjectChild(SumoBaseObject* sumoBaseObject) {
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
1714
void
1715
CommonXMLStructure::SumoBaseObject::handleAttributeError(const SumoXMLAttr attr, const std::string& type) const {
1716
WRITE_ERRORF(TL("Trying to get undefined % attribute '%' in SUMOBaseObject '%'"), type, toString(attr), toString(myTag));
1717
}
1718
1719
// ---------------------------------------------------------------------------
1720
// CommonXMLStructure - methods
1721
// ---------------------------------------------------------------------------
1722
1723
CommonXMLStructure::CommonXMLStructure() :
1724
mySumoBaseObjectRoot(nullptr),
1725
myCurrentSumoBaseObject(nullptr) {
1726
1727
}
1728
1729
1730
CommonXMLStructure::~CommonXMLStructure() {
1731
// delete mySumoBaseObjectRoot (this will also delete all SumoBaseObjectChildrens)
1732
if (mySumoBaseObjectRoot) {
1733
delete mySumoBaseObjectRoot;
1734
}
1735
}
1736
1737
1738
void
1739
CommonXMLStructure::openSUMOBaseOBject() {
1740
// first check if root is empty
1741
if (mySumoBaseObjectRoot == nullptr) {
1742
// create root
1743
mySumoBaseObjectRoot = new SumoBaseObject(nullptr);
1744
// set tag
1745
mySumoBaseObjectRoot->setTag(SUMO_TAG_ROOTFILE);
1746
// update last inserted Root
1747
myCurrentSumoBaseObject = mySumoBaseObjectRoot;
1748
} else {
1749
// create new node
1750
SumoBaseObject* newSumoBaseObject = new SumoBaseObject(myCurrentSumoBaseObject);
1751
// update last inserted node
1752
myCurrentSumoBaseObject = newSumoBaseObject;
1753
}
1754
}
1755
1756
1757
void
1758
CommonXMLStructure::closeSUMOBaseOBject() {
1759
// check that myCurrentSumoBaseObject is valid
1760
if (myCurrentSumoBaseObject) {
1761
// check if last inserted SumoBaseObject is the root
1762
if (myCurrentSumoBaseObject->getParentSumoBaseObject() == nullptr) {
1763
// reset both pointers
1764
myCurrentSumoBaseObject = nullptr;
1765
mySumoBaseObjectRoot = nullptr;
1766
} else {
1767
// update last inserted SumoBaseObject
1768
myCurrentSumoBaseObject = myCurrentSumoBaseObject->getParentSumoBaseObject();
1769
}
1770
}
1771
}
1772
1773
1774
void
1775
CommonXMLStructure::abortSUMOBaseOBject() {
1776
// delete current sumo base object and use their parent as sumo base object
1777
if (myCurrentSumoBaseObject) {
1778
if (myCurrentSumoBaseObject == mySumoBaseObjectRoot) {
1779
delete myCurrentSumoBaseObject;
1780
myCurrentSumoBaseObject = nullptr;
1781
mySumoBaseObjectRoot = nullptr;
1782
} else {
1783
auto parentSumoBaseObject = myCurrentSumoBaseObject->getParentSumoBaseObject();
1784
delete myCurrentSumoBaseObject;
1785
myCurrentSumoBaseObject = parentSumoBaseObject;
1786
}
1787
}
1788
}
1789
1790
1791
CommonXMLStructure::SumoBaseObject*
1792
CommonXMLStructure::getSumoBaseObjectRoot() const {
1793
return mySumoBaseObjectRoot;
1794
}
1795
1796
1797
CommonXMLStructure::SumoBaseObject*
1798
CommonXMLStructure::getCurrentSumoBaseObject() const {
1799
return myCurrentSumoBaseObject;
1800
}
1801
1802
/****************************************************************************/
1803
1804