/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file AdditionalHandler.h14/// @author Pablo Alvarez Lopez15/// @date Jun 202116///17// The XML-Handler for additionals loading18/****************************************************************************/19#pragma once20#include <config.h>2122#include "CommonHandler.h"2324// ===========================================================================25// class definitions26// ===========================================================================2728class AdditionalHandler : public CommonHandler {2930public:31/**@brief Constructor32* @param[in] bucket FileBucket in which place the element33*/34AdditionalHandler(FileBucket* fileBucket);3536/// @brief Destructor37virtual ~AdditionalHandler();3839/// @brief begin parse attributes40bool beginParseAttributes(SumoXMLTag tag, const SUMOSAXAttributes& attrs);4142/// @brief end parse attributes43void endParseAttributes();4445/// @brief parse SumoBaseObject (it's called recursivelly)46void parseSumoBaseObject(CommonXMLStructure::SumoBaseObject* obj);4748/// @name build functions49/// @{50/**@brief Builds a bus stop51* @param[in] sumoBaseObject sumo base object used for build52* @param[in] id The id of the bus stop53* @param[in] laneID The lane the bus stop is placed on54* @param[in] startPos Begin position of the bus stop on the lane55* @param[in] endPos End position of the bus stop on the lane56* @param[in] name Name of busStop57* @param[in] lines Names of the bus lines that halt on this bus stop58* @param[in] personCapacity larger numbers of persons trying to enter will create an upstream jam on the sidewalk.59* @param[in] parkingLength parking length60* @param[in[ color busStop color61* @param[in] friendlyPos enable or disable friendly position62* @param[in] angle busStop's angle63* @param[in] parameters generic parameters64*/65virtual bool buildBusStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& laneID,66const double startPos, const double endPos, const std::string& name, const std::vector<std::string>& lines,67const int personCapacity, const double parkingLength, const RGBColor& color, const bool friendlyPosition,68const double angle, const Parameterised::Map& parameters) = 0;6970/**@brief Builds a train stop71* @param[in] sumoBaseObject sumo base object used for build72* @param[in] id The id of the train stop73* @param[in] laneID The lane the train stop is placed on74* @param[in] startPos Begin position of the train stop on the lane75* @param[in] endPos End position of the train stop on the lane76* @param[in] name Name of trainStop77* @param[in] lines Names of the train lines that halt on this train stop78* @param[in] personCapacity larger numbers of persons trying to enter will create an upstream jam on the sidewalk.79* @param[in] parkingLength parking length80* @param[in[ color trainStop color81* @param[in] friendlyPos enable or disable friendly position82* @param[in] angle trainStop's angle83* @param[in] parameters generic parameters84*/85virtual bool buildTrainStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& laneID,86const double startPos, const double endPos, const std::string& name, const std::vector<std::string>& lines,87const int personCapacity, const double parkingLength, const RGBColor& color, const bool friendlyPosition,88const double angle, const Parameterised::Map& parameters) = 0;8990/**@brief Builds an Access91* @param[in] sumoBaseObject sumo base object used for build92* @param[in] busStop GNEAdditional of this Access belongs93* @param[in] laneID The lane the Access is placed on94* @param[in] pos position of the Access on the lane95* @param[in[ length length of the Access96* @param[in] friendlyPos enable or disable friendly position97* @param[in] parameters generic parameters98*/99virtual bool buildAccess(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& laneID, const std::string& pos,100const double length, const bool friendlyPos, const Parameterised::Map& parameters) = 0;101102/**@brief Builds a container stop103* @param[in] sumoBaseObject sumo base object used for build104* @param[in] id The id of the container stop105* @param[in] laneID The lane the container stop is placed on106* @param[in] startPos Begin position of the container stop on the lane107* @param[in] endPos End position of the container stop on the lane108* @param[in] name Name of container stop109* @param[in] lines Names of the bus lines that halt on this container stop110* @param[in] containerCapacity larger numbers of containers111* @param[in] parkingLength parking length112* @param[in[ color containerStop color113* @param[in] friendlyPos enable or disable friendly position114* @param[in] angle containerStop's angle115* @param[in] parameters generic parameters116*/117virtual bool buildContainerStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& laneID,118const double startPos, const double endPos, const std::string& name, const std::vector<std::string>& lines,119const int containerCapacity, const double parkingLength, const RGBColor& color, const bool friendlyPosition,120const double angle, const Parameterised::Map& parameters) = 0;121122/**@brief Builds a charging Station123* @param[in] sumoBaseObject sumo base object used for build124* @param[in] id The id of the charging Station125* @param[in] laneID The lane the charging Station is placed on126* @param[in] startPos Begin position of the charging Station on the lane127* @param[in] endPos End position of the charging Station on the lane128* @param[in] name Name of charging station129* @param[in] chargingPower power charged in every timeStep130* @param[in] totalPower max. power charged in every timeStep by all vehicles131* @param[in] efficiency efficiency of the charge132* @param[in] chargeInTransit enable or disable charge in transit133* @param[in] chargeDelay delay in the charge134* @param[in] chargeType charge type (normal, electric or fuel)135* @param[in] waitingTime waiting time until start charging136* @param[in] friendlyPos enable or disable friendly position137* @param[in] parkingAreaID the parking area the charging sttaion is located on138* @param[in] parameters generic parameters139*/140virtual bool buildChargingStation(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& laneID,141const double startPos, const double endPos, const std::string& name, const double chargingPower,142const double totalPower, const double efficiency, const bool chargeInTransit, const SUMOTime chargeDelay, const std::string& chargeType,143const SUMOTime waitingTime, const bool friendlyPosition, const std::string& parkingAreaID,144const Parameterised::Map& parameters) = 0;145146/**@brief Builds a Parking Area147* @param[in] sumoBaseObject sumo base object used for build148* @param[in] id The id of the Parking >Area149* @param[in] laneID The lane the Parking Area is placed on150* @param[in] startPos Begin position of the Parking Area on the lane151* @param[in] endPos End position of the Parking Area on the lane152* @param[in] departPos lane position in that vehicle must depart when leaves parkingArea153* @param[in] name Name of Parking Area154* @param[in] friendlyPos enable or disable friendly position155* @param[in] roadSideCapacity road side capacity of ParkingArea156* @param[in] width ParkingArea's width157* @param[in] length ParkingArea's length158* @param[in] angle ParkingArea's angle159* @param[in] lefthand enable or disable lefthand160* @param[in] parameters generic parameters161*/162virtual bool buildParkingArea(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& laneID,163const double startPos, const double endPos, const std::string& departPos, const std::string& name,164const std::vector<std::string>& lines, const bool friendlyPosition, const int roadSideCapacity, const bool onRoad,165const double width, const double length, const double angle, const bool lefthand, const Parameterised::Map& parameters) = 0;166167/**@brief Builds a Parking Space168* @param[in] sumoBaseObject sumo base object used for build169* @param[in] x Position X170* @param[in] y Position Y171* @param[in] z Position Z172* @param[in] name Name of Parking Area173* @param[in] width ParkingArea's width174* @param[in] length ParkingArea's length175* @param[in] angle ParkingArea's angle176* @param[in] slope ParkingArea's slope (of this space)177* @param[in] parameters generic parameters178*/179virtual bool buildParkingSpace(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const double x, const double y, const double z,180const std::string& name, const std::string& width, const std::string& length, const std::string& angle,181const double slope, const Parameterised::Map& parameters) = 0;182183/**@brief Builds a induction loop detector (E1)184* @param[in] sumoBaseObject sumo base object used for build185* @param[in] id The id of the detector186* @param[in] laneID The lane the detector is placed on187* @param[in] pos position of the detector on the lane188* @param[in] period the aggregation period the values the detector collects shall be summed up.189* @param[in] filename The path to the output file.190* @param[in] vtypes list of vehicle types to be reported191* @param[in] nextEdges list of edge ids that must all be part of the future route of the vehicle to qualify for detection192* @param[in] detectPersons detect persons instead of vehicles (pedestrians or passengers)193* @param[in] name E1 detector name194* @param[in] friendlyPos enable or disable friendly position195* @param[in] parameters generic parameters196*/197virtual bool buildE1Detector(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& laneID,198const double position, const SUMOTime period, const std::string& file, const std::vector<std::string>& vehicleTypes,199const std::vector<std::string>& nextEdges, const std::string& detectPersons, const std::string& name,200const bool friendlyPos, const Parameterised::Map& parameters) = 0;201202/**@brief Builds a single-lane Area Detector (E2)203* @param[in] sumoBaseObject sumo base object used for build204* @param[in] id The id of the detector205* @param[in] laneID The lane the detector is placed on206* @param[in] pos position of the detector on the lane207* @param[in[ length length of the detector208* @param[in] period the aggregation period the values the detector collects shall be summed up.209* @param[in] trafficLight The traffic light that triggers aggregation when switching.210* @param[in] filename The path to the output file.211* @param[in] vtypes list of vehicle types to be reported212* @param[in] nextEdges list of edge ids that must all be part of the future route of the vehicle to qualify for detection213* @param[in] detectPersons detect persons instead of vehicles (pedestrians or passengers)214* @param[in] name E2 detector name215* @param[in] timeThreshold The time-based threshold that describes how much time has to pass until a vehicle is recognized as halting216* @param[in] speedThreshold The speed-based threshold that describes how slow a vehicle has to be to be recognized as halting217* @param[in] jamThreshold The minimum distance to the next standing vehicle in order to make this vehicle count as a participant to the jam218* @param[in] friendlyPos enable or disable friendly position219* @param[in] show detector in sumo-gui220* @param[in] parameters generic parameters221*/222virtual bool buildSingleLaneDetectorE2(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& laneID,223const double pos, const double length, const SUMOTime period, const std::string& trafficLight, const std::string& filename,224const std::vector<std::string>& vehicleTypes, const std::vector<std::string>& nextEdges, const std::string& detectPersons,225const std::string& name, const SUMOTime timeThreshold, const double speedThreshold, const double jamThreshold,226const bool friendlyPos, const bool show, const Parameterised::Map& parameters) = 0;227228/**@brief Builds a multi-lane Area Detector (E2)229* @param[in] sumoBaseObject sumo base object used for build230* @param[in] id The id of the detector231* @param[in] laneIDs The lanes the detector is placed on232* @param[in] pos position of the detector on the first lane233* @param[in] endPos position of the detector on the last lane234* @param[in] period the aggregation period the values the detector collects shall be summed up.235* @param[in] trafficLight The traffic light that triggers aggregation when switching.236* @param[in] filename The path to the output file.237* @param[in] vtypes list of vehicle types to be reported238* @param[in] nextEdges list of edge ids that must all be part of the future route of the vehicle to qualify for detection239* @param[in] detectPersons detect persons instead of vehicles (pedestrians or passengers)240* @param[in] name E2 detector name241* @param[in] timeThreshold The time-based threshold that describes how much time has to pass until a vehicle is recognized as halting242* @param[in] speedThreshold The speed-based threshold that describes how slow a vehicle has to be to be recognized as halting243* @param[in] jamThreshold The minimum distance to the next standing vehicle in order to make this vehicle count as a participant to the jam244* @param[in] friendlyPos enable or disable friendly position245* @param[in] show detector in sumo-gui246* @param[in] parameters generic parameters247*/248virtual bool buildMultiLaneDetectorE2(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::vector<std::string>& laneIDs,249const double pos, const double endPos, const SUMOTime period, const std::string& trafficLight, const std::string& filename,250const std::vector<std::string>& vehicleTypes, const std::vector<std::string>& nextEdges, const std::string& detectPersons,251const std::string& name, const SUMOTime timeThreshold, const double speedThreshold, const double jamThreshold,252const bool friendlyPos, const bool show, const Parameterised::Map& parameters) = 0;253254/**@brief Builds a multi entry exit detector (E3)255* @param[in] sumoBaseObject sumo base object used for build256* @param[in] id The id of the detector257* @param[in] pos position of the detector in the map258* @param[in] period the aggregation period the values the detector collects shall be summed up.259* @param[in] filename The path to the output file.260* @param[in] vtypes list of vehicle types to be reported261* @param[in] nextEdges list of edge ids that must all be part of the future route of the vehicle to qualify for detection262* @param[in] detectPersons detect persons instead of vehicles (pedestrians or passengers)263* @param[in] name E2 detector name264* @param[in] timeThreshold The time-based threshold that describes how much time has to pass until a vehicle is recognized as halting265* @param[in] speedThreshold The speed-based threshold that describes how slow a vehicle has to be to be recognized as halting266* @param[in] openEntry enable or disable open Entry267* @param[in] expectedArrival Whether no warning should be issued when a vehicle arrives within the detector area268* @param[in] parameters generic parameters269*/270virtual bool buildDetectorE3(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const Position& pos, const SUMOTime period,271const std::string& filename, const std::vector<std::string>& vehicleTypes, const std::vector<std::string>& nextEdges,272const std::string& detectPersons, const std::string& name, const SUMOTime timeThreshold, const double speedThreshold,273const bool openEntry, const bool expectedArrival, const Parameterised::Map& parameters) = 0;274275/**@brief Builds a entry detector (E3)276* @param[in] sumoBaseObject sumo base object used for build277* @param[in] laneID The lane in which the entry detector is placed on278* @param[in] pos position of the entry detector on the lane279* @param[in] friendlyPos enable or disable friendly position280* @param[in] parameters generic parameters281*/282virtual bool buildDetectorEntry(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& laneID, const double pos, const bool friendlyPos,283const Parameterised::Map& parameters) = 0;284285/**@brief Builds a exit detector (E3)286* @param[in] sumoBaseObject sumo base object used for build287* @param[in] laneID The lane in which the exit detector is placed on288* @param[in] pos position of the exit detector on the lane289* @param[in] friendlyPos enable or disable friendly position290* @param[in] parameters generic parameters291*/292virtual bool buildDetectorExit(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& laneID, const double pos, const bool friendlyPos,293const Parameterised::Map& parameters) = 0;294295/**@brief Builds a Instant Induction Loop Detector (E1Instant)296* @param[in] sumoBaseObject sumo base object used for build297* @param[in] id The id of the detector298* @param[in] laneID The lane the detector is placed on299* @param[in] pos position of the detector on the lane300* @param[in] filename The path to the output file.301* @param[in] name E2 detector name302* @param[in] vtypes list of vehicle types to be reported303* @param[in] nextEdges list of edge ids that must all be part of the future route of the vehicle to qualify for detection304* @param[in] detectPersons detect persons instead of vehicles (pedestrians or passengers)305* @param[in] friendlyPos enable or disable friendly position306* @param[in] parameters generic parameters307*/308virtual bool buildDetectorE1Instant(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& laneID,309const double pos, const std::string& filename, const std::vector<std::string>& vehicleTypes,310const std::vector<std::string>& nextEdges, const std::string& detectPersons, const std::string& name,311const bool friendlyPos, const Parameterised::Map& parameters) = 0;312313/**@brief builds a microscopic calibrator over a lane314* @param[in] id The id of the calibrator315* @param[in] laneID The lane the calibrator is placed at316* @param[in] pos The position on the edge the calibrator lies at317* @param[in] name Calibrator name318* @param[in] outfile te file in which write results319* @param[in] jamThreshold A threshold value to detect and clear unexpected jamming320* @param[in] vTypes space separated list of vehicle type ids to consider321* @param[in] parameters generic parameters322*/323virtual bool buildLaneCalibrator(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& laneID,324const double pos, const std::string& name, const std::string& outfile, const SUMOTime period, const std::string& routeprobe,325const double jamThreshold, const std::vector<std::string>& vTypes, const Parameterised::Map& parameters) = 0;326327/**@brief builds a microscopic calibrator over an edge328* @param[in] sumoBaseObject sumo base object used for build329* @param[in] id The id of the calibrator330* @param[in] edgeID The edge the calibrator is placed at331* @param[in] pos The position on the edge the calibrator lies at332* @param[in] name Calibrator name333* @param[in] outfile te file in which write results334* @param[in] centerAfterCreation center camera after creation335* @param[in] routeProbe route probe vinculated with this calibrator336* @param[in] jamThreshold A threshold value to detect and clear unexpected jamming337* @param[in] vTypes space separated list of vehicle type ids to consider338* @param[in] parameters generic parameters339*/340virtual bool buildEdgeCalibrator(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& edgeID,341const double pos, const std::string& name, const std::string& outfile, const SUMOTime period, const std::string& routeprobe,342const double jamThreshold, const std::vector<std::string>& vTypes, const Parameterised::Map& parameters) = 0;343344/**@brief builds a calibrator flow345* @param[in] sumoBaseObject sumo base object used for build346* @param[in] vehicleParameter calibratorFlow parameter347*/348virtual bool buildCalibratorFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameter) = 0;349350/**@brief builds a rerouter351* @param[in] sumoBaseObject sumo base object used for build352* @param[in] id The id of the rerouter353* @param[in] pos position of the rerouter in the map354* @param[in] edgeIDs The edges the rerouter is placed at355* @param[in] prob The probability the rerouter reoutes vehicles with356* @param[in] name Calibrator name357* @param[in] parameters generic parameters358*/359virtual bool buildRerouter(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const Position& pos,360const std::vector<std::string>& edgeIDs, const double prob, const std::string& name, const bool off, const bool optional,361const SUMOTime timeThreshold, const std::vector<std::string>& vTypes, const Parameterised::Map& parameters) = 0;362363/**@brief builds a rerouter interval364* @param[in] sumoBaseObject sumo base object used for build365* @param[in] begin begin of interval366* @param[in] end end of interval367*/368virtual bool buildRerouterInterval(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOTime begin, const SUMOTime end) = 0;369370/**@brief builds a closing lane reroute371* @param[in] sumoBaseObject sumo base object used for build372* @param[in] closedLane closed lane373* @param[in] permissions vClasses disallowed for the lane374*/375virtual bool buildClosingLaneReroute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& closedLane, SVCPermissions permissions) = 0;376377/**@brief builds a closing edge reroute378* @param[in] sumoBaseObject sumo base object used for build379* @param[in] closedEdgeID closed edge380* @param[in] permissions vClasses disallowed for the lane381*/382virtual bool buildClosingReroute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& closedEdgeID, SVCPermissions permissions) = 0;383384/**@brief builds a dest prob reroute385* @param[in] sumoBaseObject sumo base object used for build386* @param[in] newEdgeDestinationID new edge destination ID387* @param[in] probability rerouting probability388*/389virtual bool buildDestProbReroute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& newEdgeDestinationID, const double probability) = 0;390391/**@brief builds a parking area reroute392* @param[in] sumoBaseObject sumo base object used for build393* @param[in] newParkignAreaID new parkingArea ID394* @param[in] probability rerouting probability395*/396virtual bool buildParkingAreaReroute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& newParkignAreaID, const double probability, const bool visible) = 0;397398/**@brief builds a route prob reroute399* @param[in] sumoBaseObject sumo base object used for build400* @param[in] newRouteID new route ID401* @param[in] probability rerouting probability402*/403virtual bool buildRouteProbReroute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& newRouteID, const double probability) = 0;404405/**@brief builds a Route probe406* @param[in] sumoBaseObject sumo base object used for build407* @param[in] id The id of the routeprobe408* @param[in] edgeID The edges the routeprobe is placed at409* @param[in] period the aggregation period the values the routeprobe collects shall be summed up.410* @param[in] name Calibrator name411* @param[in] file The file to read the routeprobe definitions from412* @param[in] begin The time at which to start generating output413* @param[in] vtypes list of vehicle types to be affected414* @param[in] parameters generic parameters415*/416virtual bool buildRouteProbe(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& edgeID, const SUMOTime period,417const std::string& name, const std::string& file, const SUMOTime begin, const std::vector<std::string>& vTypes,418const Parameterised::Map& parameters) = 0;419420/**@brief Builds a VariableSpeedSign (lane speed additional)421* @param[in] sumoBaseObject sumo base object used for build422* @param[in] id The id of the lane speed additional423* @param[in] destLanes List of lanes affected by this speed additional424* @param[in] name VSS name425* @param[in] vtypes list of vehicle types to be affected426* @param[in] parameters generic parameters427*/428virtual bool buildVariableSpeedSign(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const Position& pos,429const std::vector<std::string>& laneIDs, const std::string& name, const std::vector<std::string>& vTypes,430const Parameterised::Map& parameters) = 0;431432/**@brief Builds a VariableSpeedSign Step433* @param[in] sumoBaseObject sumo base object used for build434* @param[in] time step's time435* @param[in] speed new step's speed436*/437virtual bool buildVariableSpeedSignStep(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOTime time, const double speed) = 0;438439/**@brief Builds a vaporizer (lane speed additional)440* @param[in] sumoBaseObject sumo base object used for build441* @param[in] edgeID edge in which this vaporizer is placed442* @param[in] from time in which this vaporizer start443* @param[in] endTime time in which this vaporizer ends444* @param[in] name Vaporizer name445* @param[in] parameters generic parameters446*/447virtual bool buildVaporizer(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& edgeID, const SUMOTime from,448const SUMOTime endTime, const std::string& name, const Parameterised::Map& parameters) = 0;449450/**@brief Builds a TAZ (Traffic Assignment Zone)451* @param[in] sumoBaseObject sumo base object used for build452* @param[in] id TAZ ID453* @param[in] shape TAZ shape454* @param[in] center shape center455* @param[in] fill Whether the TAZ shall be filled456* @param[in] edgeIDs list of edges (note: This will create GNETAZSourceSinks/Sinks with default values)457* @param[in] name Vaporizer name458* @param[in] parameters generic parameters459*/460virtual bool buildTAZ(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const PositionVector& shape,461const Position& center, const bool fill, const RGBColor& color, const std::vector<std::string>& edgeIDs,462const std::string& name, const Parameterised::Map& parameters) = 0;463464/**@brief Builds a TAZSource (Traffic Assignment Zone)465* @param[in] sumoBaseObject sumo base object used for build466* @param[in] TAZ Traffic Assignment Zone in which this TAZSource is palced467* @param[in] edgeID edge in which TAZSource is placed468* @param[in] departWeight depart weight of TAZSource469*/470virtual bool buildTAZSource(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& edgeID, const double departWeight) = 0;471472/**@brief Builds a TAZSink (Traffic Assignment Zone)473* @param[in] net net in which element will be inserted474* @param[in] allowUndoRedo enable or disable remove created additional with ctrl + Z / ctrl + Y475* @param[in] TAZ Traffic Assignment Zone in which this TAZSink is palced476* @param[in] edgeID edge in which TAZSink is placed477* @param[in] arrivalWeight arrival weight of TAZSink478*/479virtual bool buildTAZSink(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& edgeID, const double arrivalWeight) = 0;480481/**@brief build traction substation482* @param[in] id Traction substation ID483* @param[in] pos Position of traction substation in view (optional)484* @param[in] voltage Voltage of at connection point for the overhead wire485* @param[in] currentLimit Current limit of the feeder line486* @param[in] parameters generic parameters487*/488virtual bool buildTractionSubstation(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const Position& pos,489const double voltage, const double currentLimit, const Parameterised::Map& parameters) = 0;490491/**@brief build overhead wire492* @param[in] id Overhead wire ID493* @param[in] lane Lane over which the segment is placed494* @param[in] substationId Substation to which the circuit is connected495* @param[in] laneIDs list of consecutive lanes of the circuit496* @param[in] startPos Starting position in the specified lane497* @param[in] endPos Ending position in the specified lane498* @param[in] friendlyPos enable or disable friendly position499* @param[in] forbiddenInnerLanes Inner lanes, where placing of overhead wire is restricted500* @param[in] parameters generic parameters501*/502virtual bool buildOverheadWire(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& substationId,503const std::vector<std::string>& laneIDs, const double startPos, const double endPos, const bool friendlyPos,504const std::vector<std::string>& forbiddenInnerLanes, const Parameterised::Map& parameters) = 0;505506/**@brief build overhead wire clamp507* @param[in] id Overhead wire clamp ID508* @param[in] overheadWireIDStartClamp ID of the overhead wire segment, to the start of which the overhead wire clamp is connected509* @param[in] laneIDStartClamp ID of the overhead wire segment lane of overheadWireIDStartClamp510* @param[in] overheadWireIDEndClamp ID of the overhead wire segment, to the end of which the overhead wire clamp is connected511* @param[in] laneIDEndClamp ID of the overhead wire segment lane of overheadWireIDEndClamp512* @param[in] parameters generic parameters513*/514virtual bool buildOverheadWireClamp(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& overheadWireIDStartClamp,515const std::string& laneIDStartClamp, const std::string& overheadWireIDEndClamp, const std::string& laneIDEndClamp,516const Parameterised::Map& parameters) = 0;517518/**@brief Builds a polygon using the given values519* @param[in] sumoBaseObject sumo base object used for build520* @param[in] id The name of the polygon521* @param[in] type The (abstract) type of the polygon522* @param[in] color The color of the polygon523* @param[in] layer The layer of the polygon524* @param[in] angle The rotation of the polygon525* @param[in] imgFile The raster image of the polygon526* @param[in] shape The shape of the polygon527* @param[in] geo specify if shape was loaded as GEO coordinate528* @param[in] fill Whether the polygon shall be filled529* @param[in] lineWidth Line width when drawing unfilled polygon530* @param[in] name polygon name531* @param[in] parameters generic parameters532*/533virtual bool buildPolygon(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& type,534const RGBColor& color, const double layer, const double angle, const std::string& imgFile, const PositionVector& shape,535const bool geo, const bool fill, const double lineWidth, const std::string& name, const Parameterised::Map& parameters) = 0;536537/**@brief Builds a POI using the given values538* @param[in] sumoBaseObject sumo base object used for build539* @param[in] id The name of the POI540* @param[in] type The (abstract) type of the POI541* @param[in] color The color of the POI542* @param[in] x POI's x position543* @param[in] y POI's y position544* @param[in] icon The icon of the POI545* @param[in] layer The layer of the POI546* @param[in] angle The rotation of the POI547* @param[in] imgFile The raster image of the POI548* @param[in] width The width of the POI image549* @param[in] height The height of the POI image550* @param[in] name POI name551* @param[in] parameters generic parameters552*/553virtual bool buildPOI(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& type,554const RGBColor& color, const double x, const double y, const std::string& icon, const double layer,555const double angle, const std::string& imgFile, const double width, const double height, const std::string& name,556const Parameterised::Map& parameters) = 0;557558/**@brief Builds a POI over lane using the given values559* @param[in] sumoBaseObject sumo base object used for build560* @param[in] id The name of the POI561* @param[in] type The (abstract) type of the POI562* @param[in] color The color of the POI563* @param[in] laneID The Lane in which this POI is placed564* @param[in] posOverLane The position over Lane565* @param[in] friendlyPos enable or disable friendly position566* @param[in] posLat The position lateral over Lane567* @param[in] icon The icon of the POI568* @param[in] layer The layer of the POI569* @param[in] angle The rotation of the POI570* @param[in] imgFile The raster image of the POI571* @param[in] width The width of the POI image572* @param[in] height The height of the POI image573* @param[in] name POI name574* @param[in] parameters generic parameters575*/576virtual bool buildPOILane(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& type, const RGBColor& color,577const std::string& laneID, const double posOverLane, const bool friendlyPosition, const double posLat, const std::string& icon,578const double layer, const double angle, const std::string& imgFile, const double width, const double height, const std::string& name,579const Parameterised::Map& parameters) = 0;580581/**@brief Builds a POI in GEO coordinaten using the given values582* @param[in] sumoBaseObject sumo base object used for build583* @param[in] id The name of the POI584* @param[in] type The (abstract) type of the POI585* @param[in] color The color of the POI586* @param[in] lon POI's longitud587* @param[in] lat POI's latitud588* @param[in] icon The icon of the POI589* @param[in] layer The layer of the POI590* @param[in] angle The rotation of the POI591* @param[in] imgFile The raster image of the POI592* @param[in] width The width of the POI image593* @param[in] height The height of the POI image594* @param[in] name POI name595* @param[in] parameters generic parameters596*/597virtual bool buildPOIGeo(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const std::string& type,598const RGBColor& color, const double lon, const double lat, const std::string& icon, const double layer,599const double angle, const std::string& imgFile, const double width, const double height, const std::string& name,600const Parameterised::Map& parameters) = 0;601602/**@brief Builds a JuPedSim walkable area using the given values603* @param[in] sumoBaseObject sumo base object used for build604* @param[in] id The name of the walkable area605* @param[in] shape The shape of the walkable area606* @param[in] geo specify if shape was loaded as GEO607* @param[in] name walkable area name608* @param[in] parameters generic parameters609*/610virtual bool buildJpsWalkableArea(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const PositionVector& shape,611bool geo, const std::string& name, const Parameterised::Map& parameters) = 0;612613/**@brief Builds a JuPedSim obstacle using the given values614* @param[in] sumoBaseObject sumo base object used for build615* @param[in] id The name of the obstacle616* @param[in] shape The shape of the obstacle617* @param[in] geo specify if shape was loaded as GEO618* @param[in] name obstacle name619* @param[in] parameters generic parameters620*/621virtual bool buildJpsObstacle(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const PositionVector& shape,622bool geo, const std::string& name, const Parameterised::Map& parameters) = 0;623624/// @}625626private:627/// @name parse additional attributes628/// @{629/// @brief parse busStop attributes630void parseBusStopAttributes(const SUMOSAXAttributes& attrs);631632/// @brief parse trainStop attributes633void parseTrainStopAttributes(const SUMOSAXAttributes& attrs);634635/// @brief parse access attributes636void parseAccessAttributes(const SUMOSAXAttributes& attrs);637638/// @brief parse containerStop attributes639void parseContainerStopAttributes(const SUMOSAXAttributes& attrs);640641/// @brief parse chargingStation attributes642void parseChargingStationAttributes(const SUMOSAXAttributes& attrs);643644/// @brief parse parking area attributes645void parseParkingAreaAttributes(const SUMOSAXAttributes& attrs);646647/// @brief parse parking space attributes648void parseParkingSpaceAttributes(const SUMOSAXAttributes& attrs);649650/// @brief parse E1 attributes651void parseE1Attributes(const SUMOSAXAttributes& attrs);652653/// @brief parse E2 attributes654void parseE2Attributes(const SUMOSAXAttributes& attrs);655656/// @brief parse E3 attributes657void parseE3Attributes(const SUMOSAXAttributes& attrs);658659/// @brief parse entry attributes660void parseEntryAttributes(const SUMOSAXAttributes& attrs);661662/// @brief parse exist attributes663void parseExitAttributes(const SUMOSAXAttributes& attrs);664665/// @brief parse E1 instant attributes666void parseE1InstantAttributes(const SUMOSAXAttributes& attrs);667668/// @brief parse TAZ attributes669void parseTAZAttributes(const SUMOSAXAttributes& attrs);670671/// @brief parse TAZ source attributes672void parseTAZSourceAttributes(const SUMOSAXAttributes& attrs);673674/// @brief parse TAZ sink attributes675void parseTAZSinkAttributes(const SUMOSAXAttributes& attrs);676677/// @brief parse variable speed sign attributes678void parseVariableSpeedSignAttributes(const SUMOSAXAttributes& attrs);679680/// @brief parse variable speed sign step attributes681void parseVariableSpeedSignStepAttributes(const SUMOSAXAttributes& attrs);682683/// @brief parse calibrator attributes684void parseCalibratorAttributes(const SUMOSAXAttributes& attrs);685686/// @brief parse calibrator flow attributes687void parseCalibratorFlowAttributes(const SUMOSAXAttributes& attrs);688689/// @brief parse rerouter attributes690void parseRerouterAttributes(const SUMOSAXAttributes& attrs);691692/// @brief parse rerouter interval attributes693void parseRerouterIntervalAttributes(const SUMOSAXAttributes& attrs);694695/// @brief parse closing lane reroute attributes696void parseClosingLaneRerouteAttributes(const SUMOSAXAttributes& attrs);697698/// @brief parse closing reroute attributes699void parseClosingRerouteAttributes(const SUMOSAXAttributes& attrs);700701/// @brief parse dest prob reroute attributes702void parseDestProbRerouteAttributes(const SUMOSAXAttributes& attrs);703704/// @brief parse parking area reroute attributes705void parseParkingAreaRerouteAttributes(const SUMOSAXAttributes& attrs);706707/// @brief parse route prob reroute attributes708void parseRouteProbRerouteAttributes(const SUMOSAXAttributes& attrs);709710/// @brief parse route probe attributes711void parseRouteProbeAttributes(const SUMOSAXAttributes& attrs);712713/// @brief parse vaporizer attributes714void parseVaporizerAttributes(const SUMOSAXAttributes& attrs);715716/// @brief parse traction substation717void parseTractionSubstation(const SUMOSAXAttributes& attrs);718719/// @brief parse overhead wire segment720void parseOverheadWire(const SUMOSAXAttributes& attrs);721722/// @brief parse overhead wire clamp723void parseOverheadWireClamp(const SUMOSAXAttributes& attrs);724725// @brief parse poly attributes726void parsePolyAttributes(const SUMOSAXAttributes& attrs);727728/// @brief parse POI attributes729void parsePOIAttributes(const SUMOSAXAttributes& attrs);730731/// @brief parse juPedSim walkable area attributes732void parseJpsWalkableAreaAttributes(const SUMOSAXAttributes& attrs);733734/// @brief parse juPedSim obstacle attributes735void parseJpsObstacleAttributes(const SUMOSAXAttributes& attrs);736737/// @}738739/// @brief check calibrator flow parents740bool checkCalibratorFlowParents();741742/// @brief check detect persons743bool checkDetectPersons(const SumoXMLTag currentTag, const std::string& id, const std::string& detectPersons);744745/// @brief invalidate default onstructor746AdditionalHandler() = delete;747748/// @brief invalidate copy constructor749AdditionalHandler(const AdditionalHandler& s) = delete;750751/// @brief invalidate assignment operator752AdditionalHandler& operator=(const AdditionalHandler& s) = delete;753};754755756