48 std::vector<std::string>
50 std::vector<std::string> ids;
58 return (
int)getIDList().size();
63 Lane::getEdgeID(std::string laneID) {
64 return getLane(laneID)->getEdge().getID();
69 Lane::getLength(std::string laneID) {
70 return getLane(laneID)->getLength();
75 Lane::getMaxSpeed(std::string laneID) {
76 return getLane(laneID)->getSpeedLimit();
81 Lane::getLinkNumber(std::string laneID) {
82 return (
int)getLane(laneID)->getLinkCont().size();
86 std::vector<TraCIConnection>
87 Lane::getLinks(std::string laneID) {
88 std::vector<TraCIConnection> v;
89 const MSLane*
const lane = getLane(laneID);
92 const std::string approachedLane = link->getLane() !=
nullptr ? link->getLane()->getID() :
"";
93 const bool hasPrio = link->havePriority();
94 const double speed =
MIN2(lane->
getSpeedLimit(), link->getLane()->getSpeedLimit());
98 const std::string approachedInternal = link->getViaLane() !=
nullptr ? link->getViaLane()->getID() :
"";
101 const double length = link->getLength();
102 v.push_back(TraCIConnection(approachedLane, hasPrio, isOpen, hasFoe, approachedInternal, state, direction, length));
108 std::vector<std::string>
109 Lane::getAllowed(std::string laneID) {
111 if (permissions ==
SVCAll) {
118 std::vector<std::string>
119 Lane::getDisallowed(std::string laneID) {
125 Lane::getShape(std::string laneID) {
126 TraCIPositionVector pv;
128 for (PositionVector::const_iterator pi = shp.begin(); pi != shp.end(); ++pi) {
133 pv.value.push_back(p);
140 Lane::getWidth(std::string laneID) {
141 return getLane(laneID)->getWidth();
146 Lane::getCO2Emission(std::string laneID) {
147 return getLane(laneID)->getCO2Emissions();
152 Lane::getCOEmission(std::string laneID) {
153 return getLane(laneID)->getCOEmissions();
158 Lane::getHCEmission(std::string laneID) {
159 return getLane(laneID)->getHCEmissions();
164 Lane::getPMxEmission(std::string laneID) {
165 return getLane(laneID)->getPMxEmissions();
170 Lane::getNOxEmission(std::string laneID) {
171 return getLane(laneID)->getNOxEmissions();
175 Lane::getFuelConsumption(std::string laneID) {
176 return getLane(laneID)->getFuelConsumption();
181 Lane::getNoiseEmission(std::string laneID) {
182 return getLane(laneID)->getHarmonoise_NoiseEmissions();
187 Lane::getElectricityConsumption(std::string laneID) {
188 return getLane(laneID)->getElectricityConsumption();
193 Lane::getLastStepMeanSpeed(std::string laneID) {
194 return getLane(laneID)->getMeanSpeed();
199 Lane::getLastStepOccupancy(std::string laneID) {
200 return getLane(laneID)->getNettoOccupancy();
205 Lane::getLastStepLength(std::string laneID) {
206 const MSLane* lane = getLane(laneID);
209 for (MSLane::VehCont::const_iterator j = vehs.begin(); j != vehs.end(); ++j) {
210 length += (*j)->getVehicleType().getLength();
212 if (vehs.size() > 0) {
213 length = length / (double)vehs.size();
221 Lane::getWaitingTime(std::string laneID) {
222 return getLane(laneID)->getWaitingSeconds();
227 Lane::getTraveltime(std::string laneID) {
228 const MSLane* lane = getLane(laneID);
230 if (meanSpeed != 0) {
239 Lane::getLastStepVehicleNumber(std::string laneID) {
240 return (
int)getLane(laneID)->getVehicleNumber();
244 Lane::getLastStepHaltingNumber(std::string laneID) {
245 const MSLane* lane = getLane(laneID);
248 for (MSLane::VehCont::const_iterator j = vehs.begin(); j != vehs.end(); ++j) {
258 std::vector<std::string>
259 Lane::getLastStepVehicleIDs(std::string laneID) {
260 const MSLane* lane = getLane(laneID);
261 std::vector<std::string> vehIDs;
263 for (MSLane::VehCont::const_iterator j = vehs.begin(); j != vehs.end(); ++j) {
264 vehIDs.push_back((*j)->getID());
271 std::vector<std::string>
272 Lane::getFoes(
const std::string& laneID,
const std::string& toLaneID) {
273 std::vector<std::string> foeIDs;
274 const MSLink*
const link = getLane(laneID)->getLinkTo(getLane(toLaneID));
275 if (link ==
nullptr) {
276 throw TraCIException(
"No connection from lane '" + laneID +
"' to lane '" + toLaneID +
"'");
279 foeIDs.push_back(foe->getLaneBefore()->getID());
285 std::vector<std::string>
286 Lane::getInternalFoes(
const std::string& laneID) {
287 const MSLane* lane = getLane(laneID);
288 const std::vector<const MSLane*>* foeLanes;
289 std::vector<const MSLane*>::const_iterator it;
290 std::vector<std::string> foeIDs;
296 for (it = foeLanes->begin(); foeLanes->end() != it; ++it) {
297 foeIDs.push_back((*it)->getID());
304 const std::vector<std::string>
305 Lane::getPendingVehicles(
const std::string& laneID) {
307 std::vector<std::string> vehIDs;
309 if (veh->getLane() !=
nullptr && veh->getLane()->getID() == laneID) {
310 vehIDs.push_back(veh->getID());
317 Lane::setAllowed(std::string laneID, std::string allowedClass) {
318 setAllowed(laneID, std::vector<std::string>({allowedClass}));
323 Lane::setAllowed(std::string laneID, std::vector<std::string> allowedClasses) {
331 Lane::setDisallowed(std::string laneID, std::vector<std::string> disallowedClasses) {
339 Lane::setMaxSpeed(std::string laneID,
double speed) {
346 Lane::setLength(std::string laneID,
double length) {
353 Lane::getParameter(
const std::string& laneID,
const std::string& param) {
354 return getLane(laneID)->getParameter(param,
"");
362 Lane::setParameter(
const std::string& laneID,
const std::string& key,
const std::string& value) {
372 Lane::getLane(
const std::string&
id) {
375 throw TraCIException(
"Lane '" +
id +
"' is not known");
383 shape = getLane(
id)->getShape();
387 std::shared_ptr<VariableWrapper>
388 Lane::makeWrapper() {
389 return std::make_shared<Helper::SubscriptionWrapper>(handleVariable, mySubscriptionResults, myContextSubscriptionResults);
394 Lane::handleVariable(
const std::string& objID,
const int variable, VariableWrapper* wrapper,
tcpip::Storage* paramData) {
397 return wrapper->wrapStringList(objID, variable, getIDList());
399 return wrapper->wrapInt(objID, variable, getIDCount());
401 return wrapper->wrapInt(objID, variable, getLinkNumber(objID));
403 return wrapper->wrapString(objID, variable, getEdgeID(objID));
405 return wrapper->wrapDouble(objID, variable, getLength(objID));
407 return wrapper->wrapDouble(objID, variable, getMaxSpeed(objID));
409 return wrapper->wrapStringList(objID, variable, getAllowed(objID));
411 return wrapper->wrapStringList(objID, variable, getDisallowed(objID));
413 return wrapper->wrapDouble(objID, variable, getCO2Emission(objID));
415 return wrapper->wrapDouble(objID, variable, getCOEmission(objID));
417 return wrapper->wrapDouble(objID, variable, getHCEmission(objID));
419 return wrapper->wrapDouble(objID, variable, getPMxEmission(objID));
421 return wrapper->wrapDouble(objID, variable, getNOxEmission(objID));
423 return wrapper->wrapDouble(objID, variable, getFuelConsumption(objID));
425 return wrapper->wrapDouble(objID, variable, getNoiseEmission(objID));
427 return wrapper->wrapDouble(objID, variable, getElectricityConsumption(objID));
429 return wrapper->wrapInt(objID, variable, getLastStepVehicleNumber(objID));
431 return wrapper->wrapDouble(objID, variable, getLastStepMeanSpeed(objID));
433 return wrapper->wrapStringList(objID, variable, getLastStepVehicleIDs(objID));
435 return wrapper->wrapDouble(objID, variable, getLastStepOccupancy(objID));
437 return wrapper->wrapInt(objID, variable, getLastStepHaltingNumber(objID));
439 return wrapper->wrapDouble(objID, variable, getLastStepLength(objID));
441 return wrapper->wrapDouble(objID, variable, getWaitingTime(objID));
443 return wrapper->wrapDouble(objID, variable, getTraveltime(objID));
445 return wrapper->wrapDouble(objID, variable, getWidth(objID));
447 return wrapper->wrapPositionVector(objID, variable, getShape(objID));
449 return wrapper->wrapStringList(objID, variable, getPendingVehicles(objID));
452 return wrapper->wrapString(objID, variable, getParameter(objID, paramData->
readString()));
455 return wrapper->wrapStringPair(objID, variable, getParameterWithKey(objID, paramData->
readString()));
const SVCPermissions SVCAll
all VClasses are allowed
SVCPermissions invertPermissions(SVCPermissions permissions)
negate the given permissions and ensure that only relevant bits are set
const std::vector< std::string > & getVehicleClassNamesList(SVCPermissions permissions)
Returns the ids of the given classes, divided using a ' '.
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers Deprecated classes g...
int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
const double SUMO_const_haltingSpeed
the speed threshold at which vehicles are considered as halting
#define LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOMAIN)
#define LIBSUMO_GET_PARAMETER_WITH_KEY_IMPLEMENTATION(CLASS)
C++ TraCI client API implementation.
void rebuildAllowedLanes()
Representation of a lane in the micro simulation.
const std::vector< MSLink * > & getLinkCont() const
returns the container with all links !!!
static void insertIDs(std::vector< std::string > &into)
Adds the ids of all stored lanes into the given vector.
virtual const VehCont & getVehiclesSecure() const
Returns the vehicles container; locks it for microsimulation.
double getSpeedLimit() const
Returns the lane's maximum allowed speed.
std::vector< MSVehicle * > VehCont
Container for vehicles.
static const long CHANGE_PERMISSIONS_PERMANENT
double getLength() const
Returns the lane's length.
void setPermissions(SVCPermissions permissions, long long transientID)
Sets the permissions to the given value. If a transientID is given, the permissions are recored as te...
void setMaxSpeed(double val)
Sets a new maximum speed for the lane (used by TraCI and MSCalibrator)
static bool dictionary(const std::string &id, MSLane *lane)
Static (sic!) container methods {.
MSEdge & getEdge() const
Returns the lane's edge.
void setLength(double val)
Sets a new length for the lane (used by TraCI only)
virtual void releaseVehicles() const
Allows to use the container for microsimulation again.
double getMeanSpeed() const
Returns the mean speed on this lane.
const std::vector< MSLink * > & getFoeLinks() const
const std::vector< const MSLane * > & getFoeLanes() const
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
virtual void setParameter(const std::string &key, const std::string &value)
Sets a parameter.
static double getDefaultDecel(const SUMOVehicleClass vc=SVC_IGNORING)
Returns the default deceleration for the given vehicle class This needs to be a function because the ...
static const SUMOVTypeParameter & getDefault()
return the default parameters, this is a function due to the http://www.parashift....
Representation of a vehicle.
static StringBijection< LinkState > LinkStates
link states
static StringBijection< LinkDirection > LinkDirections
link directions
const std::string & getString(const T key) const
virtual std::string readString()
virtual int readUnsignedByte()
TRACI_CONST int LAST_STEP_VEHICLE_ID_LIST
TRACI_CONST int LAST_STEP_VEHICLE_NUMBER
TRACI_CONST int VAR_NOXEMISSION
TRACI_CONST int TRACI_ID_LIST
TRACI_CONST int VAR_WAITING_TIME
std::map< std::string, libsumo::SubscriptionResults > ContextSubscriptionResults
TRACI_CONST int LANE_LINK_NUMBER
TRACI_CONST int LAST_STEP_LENGTH
TRACI_CONST int LANE_EDGE_ID
TRACI_CONST int VAR_PMXEMISSION
TRACI_CONST int VAR_COEMISSION
TRACI_CONST int VAR_WIDTH
TRACI_CONST int VAR_MAXSPEED
TRACI_CONST int LAST_STEP_MEAN_SPEED
TRACI_CONST int VAR_CO2EMISSION
TRACI_CONST int VAR_PENDING_VEHICLES
TRACI_CONST int VAR_FUELCONSUMPTION
std::map< std::string, libsumo::TraCIResults > SubscriptionResults
{object->{variable->value}}
TRACI_CONST int VAR_SHAPE
TRACI_CONST int LAST_STEP_VEHICLE_HALTING_NUMBER
TRACI_CONST int VAR_LENGTH
TRACI_CONST int VAR_HCEMISSION
TRACI_CONST int VAR_PARAMETER
TRACI_CONST int LAST_STEP_OCCUPANCY
TRACI_CONST int VAR_NOISEEMISSION
TRACI_CONST int LANE_DISALLOWED
TRACI_CONST int VAR_PARAMETER_WITH_KEY
TRACI_CONST int VAR_CURRENT_TRAVELTIME
TRACI_CONST int LANE_ALLOWED
TRACI_CONST int VAR_ELECTRICITYCONSUMPTION