44 std::vector<std::string>
46 std::vector<std::string> ids;
54 return (
int)getIDList().size();
59 Edge::getAdaptedTraveltime(
const std::string& edgeID,
double time) {
60 const MSEdge* e = getEdge(edgeID);
62 if (!
MSNet::getInstance()->getWeightsStorage().retrieveExistingTravelTime(e, time, value)) {
70 Edge::getEffort(
const std::string& edgeID,
double time) {
71 const MSEdge* e = getEdge(edgeID);
73 if (!
MSNet::getInstance()->getWeightsStorage().retrieveExistingEffort(e, time, value)) {
81 Edge::getTraveltime(
const std::string& edgeID) {
82 return getEdge(edgeID)->getCurrentTravelTime();
87 Edge::getEdge(
const std::string& edgeID) {
90 throw TraCIException(
"Edge '" + edgeID +
"' is not known");
97 Edge::getWaitingTime(
const std::string& edgeID) {
102 const std::vector<std::string>
103 Edge::getLastStepPersonIDs(
const std::string& edgeID) {
104 std::vector<std::string> personIDs;
105 std::vector<MSTransportable*> persons = getEdge(edgeID)->getSortedPersons(
MSNet::getInstance()->getCurrentTimeStep(),
true);
106 personIDs.reserve(persons.size());
108 personIDs.push_back(p->getID());
114 const std::vector<std::string>
115 Edge::getLastStepVehicleIDs(
const std::string& edgeID) {
116 std::vector<std::string> vehIDs;
117 for (
const SUMOVehicle* veh : getEdge(edgeID)->getVehicles()) {
118 vehIDs.push_back(veh->getID());
125 Edge::getCO2Emission(
const std::string& edgeID) {
127 for (
MSLane* lane : getEdge(edgeID)->getLanes()) {
128 sum += lane->getCO2Emissions();
135 Edge::getCOEmission(
const std::string& edgeID) {
137 for (
MSLane* lane : getEdge(edgeID)->getLanes()) {
138 sum += lane->getCOEmissions();
145 Edge::getHCEmission(
const std::string& edgeID) {
147 for (
MSLane* lane : getEdge(edgeID)->getLanes()) {
148 sum += lane->getHCEmissions();
155 Edge::getPMxEmission(
const std::string& edgeID) {
157 for (
MSLane* lane : getEdge(edgeID)->getLanes()) {
158 sum += lane->getPMxEmissions();
165 Edge::getNOxEmission(
const std::string& edgeID) {
167 for (
MSLane* lane : getEdge(edgeID)->getLanes()) {
168 sum += lane->getNOxEmissions();
175 Edge::getFuelConsumption(
const std::string& edgeID) {
177 for (
MSLane* lane : getEdge(edgeID)->getLanes()) {
178 sum += lane->getFuelConsumption();
185 Edge::getNoiseEmission(
const std::string& edgeID) {
187 for (
MSLane* lane : getEdge(edgeID)->getLanes()) {
188 sum += pow(10., (lane->getHarmonoise_NoiseEmissions() / 10.));
198 Edge::getElectricityConsumption(
const std::string& edgeID) {
200 for (
MSLane* lane : getEdge(edgeID)->getLanes()) {
201 sum += lane->getElectricityConsumption();
208 Edge::getLastStepVehicleNumber(
const std::string& edgeID) {
209 return getEdge(edgeID)->getVehicleNumber();
214 Edge::getLastStepMeanSpeed(
const std::string& edgeID) {
215 return getEdge(edgeID)->getMeanSpeed();
220 Edge::getLastStepOccupancy(
const std::string& edgeID) {
221 return getEdge(edgeID)->getOccupancy();
226 Edge::getLastStepHaltingNumber(
const std::string& edgeID) {
228 for (
const SUMOVehicle* veh : getEdge(edgeID)->getVehicles()) {
238 Edge::getLastStepLength(
const std::string& edgeID) {
239 double lengthSum = 0;
241 for (
const SUMOVehicle* veh : getEdge(edgeID)->getVehicles()) {
245 if (numVehicles == 0) {
248 return lengthSum / numVehicles;
253 Edge::getLaneNumber(
const std::string& edgeID) {
254 return (
int)getEdge(edgeID)->getLanes().size();
259 Edge::getStreetName(
const std::string& edgeID) {
260 return getEdge(edgeID)->getStreetName();
265 Edge::getParameter(
const std::string& edgeID,
const std::string& param) {
266 return getEdge(edgeID)->getParameter(param,
"");
274 Edge::setAllowedVehicleClasses(
const std::string& edgeID, std::vector<std::string> classes) {
276 setAllowedSVCPermissions(edgeID, permissions);
281 Edge::setDisallowedVehicleClasses(
const std::string& edgeID, std::vector<std::string> classes) {
283 setAllowedSVCPermissions(edgeID, permissions);
288 Edge::setAllowedSVCPermissions(
const std::string& edgeID,
int permissions) {
289 MSEdge* e = getEdge(edgeID);
295 pred->rebuildAllowedTargets();
301 Edge::adaptTraveltime(
const std::string& edgeID,
double time,
double beginSeconds,
double endSeconds) {
307 Edge::setEffort(
const std::string& edgeID,
double effort,
double beginSeconds,
double endSeconds) {
313 Edge::setMaxSpeed(
const std::string& edgeID,
double speed) {
314 for (
MSLane* lane : getEdge(edgeID)->getLanes()) {
315 lane->setMaxSpeed(speed);
321 Edge::setParameter(
const std::string& edgeID,
const std::string& name,
const std::string& value) {
322 getEdge(edgeID)->setParameter(name, value);
331 const MSEdge*
const e = getEdge(edgeID);
332 const std::vector<MSLane*>& lanes = e->
getLanes();
333 shape = lanes.front()->getShape();
334 if (lanes.size() > 1) {
335 copy(lanes.back()->getShape().begin(), lanes.back()->getShape().end(), back_inserter(shape));
340 std::shared_ptr<VariableWrapper>
341 Edge::makeWrapper() {
342 return std::make_shared<Helper::SubscriptionWrapper>(handleVariable, mySubscriptionResults, myContextSubscriptionResults);
347 Edge::handleVariable(
const std::string& objID,
const int variable, VariableWrapper* wrapper) {
350 return wrapper->wrapStringList(objID, variable, getIDList());
352 return wrapper->wrapInt(objID, variable, getIDCount());
354 return wrapper->wrapDouble(objID, variable, getTraveltime(objID));
356 return wrapper->wrapDouble(objID, variable, getWaitingTime(objID));
358 return wrapper->wrapStringList(objID, variable, getLastStepPersonIDs(objID));
360 return wrapper->wrapStringList(objID, variable, getLastStepVehicleIDs(objID));
362 return wrapper->wrapDouble(objID, variable, getCO2Emission(objID));
364 return wrapper->wrapDouble(objID, variable, getCOEmission(objID));
366 return wrapper->wrapDouble(objID, variable, getHCEmission(objID));
368 return wrapper->wrapDouble(objID, variable, getPMxEmission(objID));
370 return wrapper->wrapDouble(objID, variable, getNOxEmission(objID));
372 return wrapper->wrapDouble(objID, variable, getFuelConsumption(objID));
374 return wrapper->wrapDouble(objID, variable, getNoiseEmission(objID));
376 return wrapper->wrapDouble(objID, variable, getElectricityConsumption(objID));
378 return wrapper->wrapInt(objID, variable, getLastStepVehicleNumber(objID));
380 return wrapper->wrapDouble(objID, variable, getLastStepMeanSpeed(objID));
382 return wrapper->wrapDouble(objID, variable, getLastStepOccupancy(objID));
384 return wrapper->wrapInt(objID, variable, getLastStepHaltingNumber(objID));
386 return wrapper->wrapDouble(objID, variable, getLastStepLength(objID));
388 return wrapper->wrapInt(objID, variable, getLaneNumber(objID));
390 return wrapper->wrapString(objID, variable, getStreetName(objID));
SVCPermissions invertPermissions(SVCPermissions permissions)
negate the given permissions and ensure that only relevant bits are set
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.
static double sum(double val)
Computes the resulting noise.
The base class for microscopic and mesoscopic vehicles.
double getLength() const
Returns the vehicle's length.
A road/street connecting two junctions.
const MSEdgeVector & getPredecessors() const
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
void rebuildAllowedLanes()
static bool dictionary(const std::string &id, MSEdge *edge)
Inserts edge into the static dictionary Returns true if the key id isn't already in the dictionary....
static void insertIDs(std::vector< std::string > &into)
Inserts IDs of all known edges into the given vector.
double getWaitingSeconds() const
return accumated waiting time for all vehicles on this edges lanes or segments
void addTravelTime(const MSEdge *const e, double begin, double end, double value)
Adds a travel time information for an edge and a time span.
void addEffort(const MSEdge *const e, double begin, double end, double value)
Adds an effort information for an edge and a time span.
Representation of a lane in the micro simulation.
static const long CHANGE_PERMISSIONS_PERMANENT
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
MSEdgeWeightsStorage & getWeightsStorage()
Returns the net's internal edge travel times/efforts container.
Representation of a vehicle.
TRACI_CONST int LAST_STEP_VEHICLE_ID_LIST
TRACI_CONST int LAST_STEP_VEHICLE_NUMBER
TRACI_CONST int VAR_NOXEMISSION
TRACI_CONST int LAST_STEP_PERSON_ID_LIST
TRACI_CONST int TRACI_ID_LIST
TRACI_CONST int VAR_WAITING_TIME
TRACI_CONST int LAST_STEP_LENGTH
TRACI_CONST int VAR_LANE_INDEX
TRACI_CONST int VAR_PMXEMISSION
TRACI_CONST int VAR_COEMISSION
TRACI_CONST int LAST_STEP_MEAN_SPEED
TRACI_CONST int VAR_CO2EMISSION
TRACI_CONST int VAR_FUELCONSUMPTION
TRACI_CONST int LAST_STEP_VEHICLE_HALTING_NUMBER
std::map< std::string, TraCIResults > SubscriptionResults
{object->{variable->value}}
TRACI_CONST int VAR_HCEMISSION
TRACI_CONST int LAST_STEP_OCCUPANCY
TRACI_CONST int VAR_NOISEEMISSION
TRACI_CONST int VAR_CURRENT_TRAVELTIME
std::map< std::string, SubscriptionResults > ContextSubscriptionResults
TRACI_CONST int VAR_ELECTRICITYCONSUMPTION