Eclipse SUMO - Simulation of Urban MObility
GNERouteHandler.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
18 // Builds demand objects for netedit
19 /****************************************************************************/
20 #pragma once
21 #include <config.h>
22 
33 
34 
35 // ===========================================================================
36 // class declarations
37 // ===========================================================================
38 
39 class GNEViewNet;
40 class GNEEdge;
41 class GNETAZ;
42 class GNEDemandElement;
43 class GNEVehicle;
44 class GNEPerson;
45 class GNEContainer;
46 class GNEUndoList;
47 
48 // ===========================================================================
49 // class definitions
50 // ===========================================================================
51 
54 class GNERouteHandler : public RouteHandler {
55 
56 public:
58  GNERouteHandler(const std::string& file, GNENet* net, const bool allowUndoRedo, const bool overwrite);
59 
61  virtual ~GNERouteHandler();
62 
65 
67  void buildVType(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVTypeParameter& vTypeParameter);
68 
70  void buildVTypeDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const int deterministic,
71  const std::vector<std::string>& vTypeIDs, const std::vector<double>& probabilities);
72 
74  void buildRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, SUMOVehicleClass vClass,
75  const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
76  const double probability, const Parameterised::Map& routeParameters);
77 
79  void buildEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::vector<std::string>& edgeIDs,
80  const RGBColor& color, const int repeat, const SUMOTime cycleTime,
81  const Parameterised::Map& routeParameters);
82 
84  void buildRouteDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id,
85  const std::vector<std::string>& routeIDs, const std::vector<double>& probabilities);
86 
88  void buildVehicleOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters);
89 
91  void buildFlowOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters);
92 
94  void buildTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
95  const std::string& fromEdgeID, const std::string& toEdgeID);
96 
98  void buildTripJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
99  const std::string& fromJunctionID, const std::string& toJunctionID);
100 
102  void buildTripTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
103  const std::string& fromTAZID, const std::string& toTAZID);
104 
106  void buildFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
107  const std::string& fromEdgeID, const std::string& toEdgeIDs);
108 
110  void buildFlowJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
111  const std::string& fromJunctionID, const std::string& toJunctionID);
112 
114  void buildFlowTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
115  const std::string& fromTAZID, const std::string& toTAZID);
116 
118  void buildPerson(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personParameters);
119 
121  void buildPersonFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personFlowParameters);
122 
124  void buildPersonTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject,
125  const std::string& fromEdgeID, const std::string& fromTAZID, const std::string& fromJunctionID, const std::string& fromBusStopID, const std::string& fromTrainStopID,
126  const std::string& toEdgeID, const std::string& toTAZID, const std::string& toJunctionID, const std::string& toBusStopID, const std::string& toTrainStopID,
127  double arrivalPos, const std::vector<std::string>& types, const std::vector<std::string>& modes, const std::vector<std::string>& lines);
128 
130  void buildWalk(const CommonXMLStructure::SumoBaseObject* sumoBaseObject,
131  const std::string& fromEdgeID, const std::string& fromTAZID, const std::string& fromJunctionID, const std::string& fromBusStopID, const std::string& fromTrainStopID,
132  const std::string& toEdgeID, const std::string& toTAZID, const std::string& toJunctionID, const std::string& toBusStopID, const std::string& toTrainStopID,
133  const std::vector<std::string>& edgeIDs, const std::string& routeID, double arrivalPos);
134 
136  void buildRide(const CommonXMLStructure::SumoBaseObject* sumoBaseObject,
137  const std::string& fromEdgeID, const std::string& fromBusStopID, const std::string& fromTrainStopID,
138  const std::string& toEdgeID, const std::string& toBusStopID, const std::string& toTrainStopID,
139  double arrivalPos, const std::vector<std::string>& lines);
140 
142  void buildContainer(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerParameters);
143 
145  void buildContainerFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerFlowParameters);
146 
148  void buildTransport(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& fromEdgeID, const std::string& fromContainerStopID,
149  const std::string& toEdgeID, const std::string& toContainerStopID, const std::vector<std::string>& lines, const double arrivalPos);
150 
152  void buildTranship(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& fromEdgeID, const std::string& fromContainerStopID,
153  const std::string& toEdgeID, const std::string& toContainerStopID, const std::vector<std::string>& edgeIDs, const double speed,
154  const double departPosition, const double arrivalPosition);
155 
157  void buildPersonStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& edgeID, const std::string& busStopID,
158  const std::string& trainStopID, const double endPos, const SUMOTime duration, const SUMOTime until,
159  const std::string& actType, const bool friendlyPos, const int parameterSet);
160 
162  void buildContainerStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& edgeID, const std::string& containerStopID,
163  const double endPos, const SUMOTime duration, const SUMOTime until, const std::string& actType, const bool friendlyPos,
164  const int parameterSet);
166 
168  void buildStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter::Stop& stopParameters);
169 
171  bool buildPersonPlan(const GNEDemandElement* planTemplate, GNEDemandElement* personParent, GNEAttributesCreator* personPlanAttributes,
172  GNEPlanCreator* planCreator, const bool centerAfterCreation);
173 
175  bool buildContainerPlan(const GNEDemandElement* planTemplate, GNEDemandElement* containerParent, GNEAttributesCreator* containerPlanAttributes,
176  GNEPlanCreator* planCreator, const bool centerAfterCreation);
177 
179  bool isVehicleIdDuplicated(const std::string& id);
180 
182  bool isViaAttributeValid(const std::vector<std::string>& via);
183 
185  bool isPersonIdDuplicated(const std::string& id);
186 
188  bool isContainerIdDuplicated(const std::string& id);
189 
192 
194  static void transformToVehicle(GNEVehicle* originalVehicle, bool createEmbeddedRoute);
195 
197  static void transformToRouteFlow(GNEVehicle* originalVehicle, bool createEmbeddedRoute);
198 
200  static void transformToTrip(GNEVehicle* originalVehicle);
201 
203  static void transformToFlow(GNEVehicle* originalVehicle);
204 
206  static void transformToTripJunctions(GNEVehicle* originalVehicle);
207 
209  static void transformToFlowJunctions(GNEVehicle* originalVehicle);
210 
212  static void transformToTripTAZs(GNEVehicle* originalVehicle);
213 
215  static void transformToFlowTAZs(GNEVehicle* originalVehicle);
216 
218 
221 
223  static void transformToPerson(GNEPerson* originalPerson);
224 
226  static void transformToPersonFlow(GNEPerson* originalPerson);
227 
229 
232 
234  static void transformToContainer(GNEContainer* originalContainer);
235 
237  static void transformToContainerFlow(GNEContainer* originalContainer);
238 
240 
243 
245  static bool canReverse(const GNEDemandElement* element);
246 
248  static bool canReverse(GNENet* net, SUMOVehicleClass vClass, const std::vector<GNEEdge*>& edges);
249 
251  static void reverse(GNEDemandElement* element);
252 
254  static void addReverse(GNEDemandElement* element);
255 
257 
258 protected:
260  GNEJunction* parseJunction(const SumoXMLTag tag, const std::string& junctionID);
261 
263  GNEAdditional* parseTAZ(const SumoXMLTag tag, const std::string& TAZID);
264 
266  GNEEdge* parseEdge(const SumoXMLTag tag, const std::string& edgeID);
267 
269  std::vector<GNEEdge*> parseEdges(const SumoXMLTag tag, const std::vector<std::string>& edgeIDs);
270 
272  GNEDemandElement* getType(const std::string& id) const;
273 
276 
279 
282 
285 
288 
291 
294 
297 
300 
302  bool getDistributionElements(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, SumoXMLTag distributionElementTag,
303  const std::vector<std::string>& distributionElementIDs, const std::vector<double>& probabilities,
304  std::vector<const GNEDemandElement*>& elements);
305 
307  bool checkDuplicatedDemandElement(const SumoXMLTag tag, const std::string& id);
308 
310  void overwriteDemandElement();
311 
312 private:
315 
318 
320  const bool myAllowUndoRedo;
321 
323  const bool myOverwrite;
324 
327 };
long long int SUMOTime
Definition: GUI.h:35
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
SumoXMLTag
Numbers representing SUMO-XML - element names.
An Element which don't belong to GNENet but has influence in the simulation.
Definition: GNEAdditional.h:49
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:53
A NBNetBuilder extended by visualisation and editing capabilities.
Definition: GNENet.h:42
Builds trigger objects for GNENet (busStops, chargingStations, detectors, etc..)
void buildTrip(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromEdgeID, const std::string &toEdgeID)
build trip
bool isContainerIdDuplicated(const std::string &id)
check if there is already a container (Container or ContainerFlow) with the given ID
const bool myOverwrite
check if overwrite
bool isVehicleIdDuplicated(const std::string &id)
check if there is already a vehicle (Vehicle, Trip, Flow or Flow) with the given ID
void buildContainerFlow(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &containerFlowParameters)
build container flow
static void addReverse(GNEDemandElement *element)
add reverse for given demand element
bool checkDuplicatedDemandElement(const SumoXMLTag tag, const std::string &id)
check if given ID correspond to a duplicated demand element
bool buildPersonPlan(const GNEDemandElement *planTemplate, GNEDemandElement *personParent, GNEAttributesCreator *personPlanAttributes, GNEPlanCreator *planCreator, const bool centerAfterCreation)
build person plan
CommonXMLStructure::SumoBaseObject * myPlanObject
pointer for person and container plans
GNEDemandElement * getPersonParent(const CommonXMLStructure::SumoBaseObject *sumoBaseObject) const
get person parent
GNEJunction * parseJunction(const SumoXMLTag tag, const std::string &junctionID)
parse junction
const bool myAllowUndoRedo
allow undo/redo
void overwriteDemandElement()
remove overwritten demand element
void buildPerson(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &personParameters)
build person
void buildWalk(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &fromEdgeID, const std::string &fromTAZID, const std::string &fromJunctionID, const std::string &fromBusStopID, const std::string &fromTrainStopID, const std::string &toEdgeID, const std::string &toTAZID, const std::string &toJunctionID, const std::string &toBusStopID, const std::string &toTrainStopID, const std::vector< std::string > &edgeIDs, const std::string &routeID, double arrivalPos)
build walk
static void transformToRouteFlow(GNEVehicle *originalVehicle, bool createEmbeddedRoute)
transform routeFlow over an existent route
GNENet * myNet
pointer to GNENet
GNEAdditional * getPreviousPlanTAZ(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan TAZ
void buildFlowTAZs(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromTAZID, const std::string &toTAZID)
build flow over junctions
bool isPersonIdDuplicated(const std::string &id)
check if there is already a person (Person or PersonFlow) with the given ID
static void transformToContainerFlow(GNEContainer *originalContainer)
transform routeFlow over an existent route
void buildVehicleOverRoute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters)
build a vehicle over an existent route
static void transformToFlow(GNEVehicle *originalVehicle)
transform to flow
void buildTripTAZs(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromTAZID, const std::string &toTAZID)
build trip over TAZs
GNEEdge * parseEdge(const SumoXMLTag tag, const std::string &edgeID)
parse edge
void buildFlowOverRoute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters)
build a flow over an existent route
void buildTripJunctions(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromJunctionID, const std::string &toJunctionID)
build trip over junctions
void buildVTypeDistribution(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const int deterministic, const std::vector< std::string > &vTypeIDs, const std::vector< double > &probabilities)
build vType distribution
void buildFlowJunctions(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromJunctionID, const std::string &toJunctionID)
build flow over junctions
GNEAdditional * getPreviousPlanTrainStop(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan trainStop
static bool canReverse(const GNEDemandElement *element)
reverse functions
bool isViaAttributeValid(const std::vector< std::string > &via)
check if via attribute is valid
void buildVType(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVTypeParameter &vTypeParameter)
build vType
GNEEdge * getPreviousPlanEdge(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan edge
GNEAdditional * getPreviousPlanContainerStop(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan containerStop
static void transformToTrip(GNEVehicle *originalVehicle)
transform to trip
void buildTransport(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &fromEdgeID, const std::string &fromContainerStopID, const std::string &toEdgeID, const std::string &toContainerStopID, const std::vector< std::string > &lines, const double arrivalPos)
build transport
void buildRouteDistribution(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::vector< std::string > &routeIDs, const std::vector< double > &probabilities)
build route distribution
void buildPersonTrip(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &fromEdgeID, const std::string &fromTAZID, const std::string &fromJunctionID, const std::string &fromBusStopID, const std::string &fromTrainStopID, const std::string &toEdgeID, const std::string &toTAZID, const std::string &toJunctionID, const std::string &toBusStopID, const std::string &toTrainStopID, double arrivalPos, const std::vector< std::string > &types, const std::vector< std::string > &modes, const std::vector< std::string > &lines)
build person trip
static void transformToPerson(GNEPerson *originalPerson)
transform person functions
void buildFlow(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromEdgeID, const std::string &toEdgeIDs)
build flow
bool buildContainerPlan(const GNEDemandElement *planTemplate, GNEDemandElement *containerParent, GNEAttributesCreator *containerPlanAttributes, GNEPlanCreator *planCreator, const bool centerAfterCreation)
build container plan
GNEAdditional * parseTAZ(const SumoXMLTag tag, const std::string &TAZID)
parse TAZ
GNEDemandElement * getType(const std::string &id) const
get type (Either type o typeDistribution)
virtual ~GNERouteHandler()
Destructor.
void buildEmbeddedRoute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::vector< std::string > &edgeIDs, const RGBColor &color, const int repeat, const SUMOTime cycleTime, const Parameterised::Map &routeParameters)
build embedded route
void buildPersonFlow(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &personFlowParameters)
build person flow
const CommonXMLStructure::SumoBaseObject * getPreviousPlanObj(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan obj
std::vector< GNEEdge * > parseEdges(const SumoXMLTag tag, const std::vector< std::string > &edgeIDs)
parse edges
GNEJunction * getPreviousPlanJunction(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan junction
void buildTranship(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &fromEdgeID, const std::string &fromContainerStopID, const std::string &toEdgeID, const std::string &toContainerStopID, const std::vector< std::string > &edgeIDs, const double speed, const double departPosition, const double arrivalPosition)
build tranship
GNEDemandElement * getContainerParent(const CommonXMLStructure::SumoBaseObject *sumoBaseObject) const
get container parent
GNEAdditional * getPreviousPlanBusStop(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan busStop
void buildStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter::Stop &stopParameters)
build stop
static void reverse(GNEDemandElement *element)
reverse given demand element
static void transformToFlowJunctions(GNEVehicle *originalVehicle)
transform to flow over junctions
static void transformToTripJunctions(GNEVehicle *originalVehicle)
transform to trip over junctions
static void transformToContainer(GNEContainer *originalContainer)
transform container functions
void buildPersonStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &edgeID, const std::string &busStopID, const std::string &trainStopID, const double endPos, const SUMOTime duration, const SUMOTime until, const std::string &actType, const bool friendlyPos, const int parameterSet)
build person stop
void buildContainer(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &containerParameters)
build container
static void transformToPersonFlow(GNEPerson *originalPerson)
transform routeFlow over an existent route
bool getDistributionElements(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, SumoXMLTag distributionElementTag, const std::vector< std::string > &distributionElementIDs, const std::vector< double > &probabilities, std::vector< const GNEDemandElement * > &elements)
get distribution elements
void buildRoute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, SUMOVehicleClass vClass, const std::vector< std::string > &edgeIDs, const RGBColor &color, const int repeat, const SUMOTime cycleTime, const double probability, const Parameterised::Map &routeParameters)
build route
GNEDemandElement * myDemandToOverwrite
demand to overwrite (using undo-redo
static void transformToFlowTAZs(GNEVehicle *originalVehicle)
transform to flow over TAZs
GNERouteHandler(const std::string &file, GNENet *net, const bool allowUndoRedo, const bool overwrite)
Constructor.
void buildRide(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &fromEdgeID, const std::string &fromBusStopID, const std::string &fromTrainStopID, const std::string &toEdgeID, const std::string &toBusStopID, const std::string &toTrainStopID, double arrivalPos, const std::vector< std::string > &lines)
build ride
static void transformToVehicle(GNEVehicle *originalVehicle, bool createEmbeddedRoute)
transform vehicle functions
void buildContainerStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &edgeID, const std::string &containerStopID, const double endPos, const SUMOTime duration, const SUMOTime until, const std::string &actType, const bool friendlyPos, const int parameterSet)
build container stop
static void transformToTripTAZs(GNEVehicle *originalVehicle)
transform to trip over TAZs
Definition: GNETAZ.h:34
std::map< std::string, std::string > Map
parameters map
Definition: Parameterised.h:45
Structure representing possible vehicle parameter.
Definition of vehicle stop (position and duration)
Structure representing possible vehicle parameter.