Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/utils/handlers/RouteHandler.h
193867 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2026 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 RouteHandler.h
15
/// @author Pablo Alvarez Lopez
16
/// @date Jun 2021
17
///
18
// The XML-Handler for route elements loading
19
/****************************************************************************/
20
#pragma once
21
#include <config.h>
22
23
#include "CommonHandler.h"
24
25
// ===========================================================================
26
// class definitions
27
// ===========================================================================
28
29
class RouteHandler : public CommonHandler {
30
31
public:
32
/**@brief Constructor
33
* @param[in] bucket FileBucket in which place the element
34
* @param[in] hardFail enable or disable hardFails (continue handling demand elements if there is an error)
35
*/
36
RouteHandler(FileBucket* fileBucket, const bool hardFail);
37
38
/// @brief Destructor
39
virtual ~RouteHandler();
40
41
/// @brief begin parse attributes
42
bool beginParseAttributes(SumoXMLTag tag, const SUMOSAXAttributes& attrs);
43
44
/// @brief end parse attributes
45
void endParseAttributes();
46
47
/// @brief parse SumoBaseObject (it's called recursivelly)
48
void parseSumoBaseObject(CommonXMLStructure::SumoBaseObject* obj);
49
50
/// @name build functions
51
/// @{
52
53
/// @brief build vType
54
virtual bool buildVType(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVTypeParameter& vTypeParameter) = 0;
55
56
/// @brief build vType ref
57
virtual bool buildVTypeRef(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& vTypeID, const double probability) = 0;
58
59
/// @brief build vType distribution
60
virtual bool buildVTypeDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const int deterministic) = 0;
61
62
/// @brief build route
63
virtual bool buildRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, SUMOVehicleClass vClass,
64
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
65
const double probability, const Parameterised::Map& routeParameters) = 0;
66
67
/// @brief build route ref
68
virtual bool buildRouteRef(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& routeID, const double probability) = 0;
69
70
/// @brief build route distribution
71
virtual bool buildRouteDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id) = 0;
72
73
/// @brief build a vehicle over an existent route
74
virtual bool buildVehicleOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters) = 0;
75
76
/// @brief build a vehicle with an embedded route
77
virtual bool buildVehicleEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
78
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
79
const Parameterised::Map& routeParameters) = 0;
80
81
/// @brief build a flow over an existent route
82
virtual bool buildFlowOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters) = 0;
83
84
/// @brief build a flow with an embedded route
85
virtual bool buildFlowEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
86
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
87
const Parameterised::Map& routeParameters) = 0;
88
89
/// @brief build trip (from-to edges)
90
virtual bool buildTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
91
const std::string& fromEdgeID, const std::string& toEdgeID) = 0;
92
93
/// @brief build trip (from-to junctions)
94
virtual bool buildTripJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
95
const std::string& fromJunctionID, const std::string& toJunctionID) = 0;
96
97
/// @brief build trip (from-to TAZs)
98
virtual bool buildTripTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
99
const std::string& fromTazID, const std::string& toTazID) = 0;
100
101
/// @brief build flow (from-to edges)
102
virtual bool buildFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
103
const std::string& fromEdgeID, const std::string& toEdgeID) = 0;
104
105
/// @brief build flow (from-to junctions)
106
virtual bool buildFlowJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
107
const std::string& fromJunctionID, const std::string& toJunctionID) = 0;
108
109
/// @brief build flow (from-to TAZs)
110
virtual bool buildFlowTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
111
const std::string& fromTAZID, const std::string& toTAZID) = 0;
112
113
/// @brief build person
114
virtual bool buildPerson(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personParameters) = 0;
115
116
/// @brief build person flow
117
virtual bool buildPersonFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personFlowParameters) = 0;
118
119
/// @brief build person trip
120
virtual bool buildPersonTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
121
const double arrivalPos, const std::vector<std::string>& types, const std::vector<std::string>& modes,
122
const std::vector<std::string>& lines, const double walkFactor, const std::string& group) = 0;
123
124
/// @brief build walk
125
virtual bool buildWalk(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
126
const double arrivalPos, const double speed, const SUMOTime duration) = 0;
127
128
/// @brief build ride
129
virtual bool buildRide(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
130
const double arrivalPos, const std::vector<std::string>& lines, const std::string& group) = 0;
131
132
/// @brief build container
133
virtual bool buildContainer(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerParameters) = 0;
134
135
/// @brief build container flow
136
virtual bool buildContainerFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerFlowParameters) = 0;
137
138
/// @brief build transport
139
virtual bool buildTransport(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
140
const double arrivalPos, const std::vector<std::string>& lines, const std::string& group) = 0;
141
142
/// @brief build tranship
143
virtual bool buildTranship(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
144
const double arrivalPosition, const double departPosition, const double speed, const SUMOTime duration) = 0;
145
146
/// @brief build stop
147
virtual bool buildStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
148
const SUMOVehicleParameter::Stop& stopParameters) = 0;
149
150
/// @}
151
152
private:
153
/// @brief enable or disable hardFail (stop parsing if parameter aren't correct)
154
const bool myHardFail;
155
156
/// @brief The default value for flow begins
157
SUMOTime myFlowBeginDefault;
158
159
/// @brief The default value for flow ends
160
SUMOTime myFlowEndDefault;
161
162
/// @name parse route element attributes
163
/// @{
164
/// @brief parse vType
165
void parseVType(const SUMOSAXAttributes& attrs);
166
167
/// @brief parse vType reference
168
void parseVTypeRef(const SUMOSAXAttributes& attrs);
169
170
/// @brief parse vType distribution
171
void parseVTypeDistribution(const SUMOSAXAttributes& attrs);
172
173
/// @brief parse route
174
void parseRoute(const SUMOSAXAttributes& attrs);
175
176
/// @brief parse route reference
177
void parseRouteRef(const SUMOSAXAttributes& attrs);
178
179
/// @brief parse embedded route
180
void parseRouteEmbedded(const SUMOSAXAttributes& attrs);
181
182
/// @brief parse route distribution
183
void parseRouteDistribution(const SUMOSAXAttributes& attrs);
184
185
/// @brief parse trip
186
void parseTrip(const SUMOSAXAttributes& attrs);
187
188
/// @brief parse vehicle (including vehicles over routes and vehicles with embedded routes)
189
void parseVehicle(const SUMOSAXAttributes& attrs);
190
191
/// @brief parse flow (including flows, flows over routes and flows with embedded routes)
192
void parseFlow(const SUMOSAXAttributes& attrs);
193
194
/// @brief parse stop
195
void parseStop(const SUMOSAXAttributes& attrs);
196
197
/// @brief parse person
198
void parsePerson(const SUMOSAXAttributes& attrs);
199
200
/// @brief parse person flow
201
void parsePersonFlow(const SUMOSAXAttributes& attrs);
202
203
/// @brief parse person trip
204
void parsePersonTrip(const SUMOSAXAttributes& attrs);
205
206
/// @brief parse walk
207
void parseWalk(const SUMOSAXAttributes& attrs);
208
209
/// @brief parse ride
210
void parseRide(const SUMOSAXAttributes& attrs);
211
212
/// @brief parse container
213
void parseContainer(const SUMOSAXAttributes& attrs);
214
215
/// @brief parse container flow
216
void parseContainerFlow(const SUMOSAXAttributes& attrs);
217
218
/// @brief parse transport
219
void parseTransport(const SUMOSAXAttributes& attrs);
220
221
/// @brief parse tranship
222
void parseTranship(const SUMOSAXAttributes& attrs);
223
224
/// @brief parse interval
225
void parseInterval(const SUMOSAXAttributes& attrs);
226
227
/// @brief parse nested CarFollowingModel
228
bool parseNestedCFM(const SumoXMLTag tag, const SUMOSAXAttributes& attrs,
229
CommonXMLStructure::SumoBaseObject* vTypeObject);
230
231
/// @brief parse stop parameters
232
bool parseStopParameters(SUMOVehicleParameter::Stop& stop, const SUMOSAXAttributes& attrs);
233
234
/// @}
235
236
/// @name check functions used for simplify code in handlers
237
/// @{
238
239
/// @brief check if element is defined over from-to edges
240
bool isOverFromToEdges(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
241
242
/// @brief check if element is defined over from-to junctions
243
bool isOverFromToJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
244
245
/// @brief check if element is defined over from-to junctions
246
bool isOverFromToTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
247
248
/// @}
249
250
/// @brief adjust types and probabilities
251
void adjustTypesAndProbabilities(std::vector<std::string>& vTypes, std::vector<double>& probabilities);
252
253
/// @brief invalidate default onstructor
254
RouteHandler() = delete;
255
256
/// @brief invalidate copy constructor
257
RouteHandler(const RouteHandler& s) = delete;
258
259
/// @brief invalidate assignment operator
260
RouteHandler& operator=(const RouteHandler& s) = delete;
261
};
262
263