在静脉中,我可以使用Coord.distance()
函数计算两个协调之间的距离。但是,此功能只是计算两点之间的笛卡尔距离。两个车辆或车辆与交叉点之间的实际距离取决于边缘形状(例如,弯道边缘)。此外,它取决于边长(SUMO参数)。他们在SUMO或Veins中的功能是否考虑了这些因素?
答案 0 :(得分:1)
你可以使用SuMO distance request TraCI call来计算空中距离以及两个任意位置之间的行驶距离。在Veins中,此调用在TraCICommandInterface::getDistance()
中实现:
double getDistance(const Coord& position1, const Coord& position2, bool returnDrivingDistance);
答案 1 :(得分:0)
我发现了我的错误!
为了获得车辆与另一个节点(特别是交通信号灯)之间的行驶距离,我不得不估算一个有效的Coord,该信号靠近交通信号灯并位于车辆路线上,与计算之间的距离相反车辆和交通信号灯的交汇处。
为了估计交通信号灯的有效坐标,我使用了道路ID中任何车道将通过交通信号灯的车道的最后一个坐标。该代码将是这样的:
// get traffic light controlled lanes
Veins::TraCICommandInterface::Trafficlight traciTL = traci->trafficlight(trafficLightID);
// controlled lanes
std::list<std::string> lanes = traciTL.getControlledLanes();
for(auto lane : lanes){
// which controlled lane in the road_id
if(traci->lane(lane).getRoadId() == road_id){ // found
// return last Coord of this lane
std::list<Coord> laneCoords = traci->lane(lane).getShape();
return getDistance(vehicle_Coord, laneCoords.back(),true);
}
}