SUMO - 模拟交通场景

时间:2017-04-03 14:09:52

标签: sumo

如何模拟历史数据的连续流量,包括: 1.车辆ID; 2.速度; 3.坐标

不知道每个车辆ID的路线。

1 个答案:

答案 0 :(得分:1)

这是一个常见问题,但此前可能尚未得到解答。不幸的是,答案很大程度上取决于输入数据的质量,主要取决于您的位置更新的频率/距离(如果每个数据都有时间戳,这也会很有帮助)以及这些位置与街道网络的匹配程度。在最好的情况下,在街道网络中的路线的每个边缘都有位置更新,您可以通过将位置映射到街道来简单地读取路线。这个映射可以使用sumo的python sumolib来完成:

import sumolib 
net = sumolib.net.readNet("myNet.net.xml")
route = []
radius = 1
for x, y in coordinates:
    minDist, minEdge = min([(dist, edge) for edge, dist in net.getNeighboringEdges(x_coordinate, y_coordinate, radius)])
    if len(route) == 0 or route[-1] != minEdge.getID():
        route.append(minEdge.getID())

另请参阅http://sumo.dlr.de/wiki/Tools/Sumolib#locate_nearby_edges_based_on_the_geo-coordinate了解其他地理转换。

如果路线中没有被数据点击中的边缘或者如果您有不匹配(例如匹配沿“错误”方向的边缘),则会失败。在前一种情况下,您可以使用相扑的duarouter轻松修复路线。

> duarouter -n myNet.net.xml -r myRoutesWithGaps.rou.xml -o myRepairedRoutes.rou.xml --repair

后一种情况在检测和修复方面要困难得多,因为它在很大程度上取决于您对错误边缘的定义。几乎有明显的案例,例如突然向相反的方向发射(在实际交通中仍然可能发生)以及许多小的弯路,这些弯路难以决定​​并且应该得到单独的答案。

由于您要求持续输入,您可能也有兴趣使用TraCIFAQ on constant input flow进行实际操作。