Line data Source code
1 : #include <iostream> 2 : 3 : #include "Dynamic/Env/Env.hpp" 4 : #include "Dynamic/Env/Lane.hpp" 5 : #include "data/SUMO/NetState.hpp" 6 : #include "data/SUMO/Network.hpp" 7 : #include "data/SUMO/SUMO.hpp" 8 : 9 : using namespace std; 10 : using namespace SUMO; 11 : 12 : using namespace utils::stringify; 13 : 14 : // clang-format off 15 0 : NetState::Timestep NetState::Timestep::Loader< 16 : Dynamic::Env::Env &, 17 : const Dynamic::SUMOAdapter &, 18 : Dynamic::Time 19 : >::load( 20 : Dynamic::Env::Env &env, 21 : const Dynamic::SUMOAdapter &adapter, 22 : Dynamic::Time t 23 : ) { 24 : // clang-format on 25 : 26 0 : env.updateAllVehicles(t); 27 : 28 0 : Timestep ret{t}; 29 : 30 0 : for(const Dynamic::Env::Vehicle &vehicle: env.getVehicles()) { 31 0 : if(vehicle.state == Dynamic::Env::Vehicle::State::LEFT) 32 0 : continue; 33 : 34 0 : const SUMO::Network::Edge::ID sumoEdgeID = adapter.toSumoEdge(vehicle.position.lane.edge.id); 35 : 36 0 : const SUMO::Length pos = vehicle.position.offset; 37 0 : const SUMO::Speed speed = vehicle.speed; 38 : 39 0 : if(!ret.edges.count(sumoEdgeID)) { 40 0 : ret.edges[sumoEdgeID] = Edge{sumoEdgeID}; 41 : } 42 : 43 0 : Timestep::Edge &edge = ret.edges.at(sumoEdgeID); 44 : 45 0 : SUMO::Network::Edge::Lane::ID sumoLaneID = sumoEdgeID + "_" + to_string(vehicle.position.lane.index); 46 0 : if(!edge.lanes.count(sumoLaneID)) { 47 0 : edge.lanes[sumoLaneID] = Edge::Lane{sumoLaneID}; 48 : } 49 : 50 0 : Timestep::Edge::Lane &lane = edge.lanes.at(sumoLaneID); 51 : 52 0 : lane.addVehicle( 53 0 : stringify<Dynamic::Env::Vehicle::ID>::toString(vehicle.id), 54 : pos, 55 : speed 56 0 : ); 57 : } 58 : 59 0 : return ret; 60 : }