如何模拟历史数据的连续流量,包括: 1.车辆ID; 2.速度; 3.坐标
不知道每个车辆ID的路线。
答案 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
后一种情况在检测和修复方面要困难得多,因为它在很大程度上取决于您对错误边缘的定义。几乎有明显的案例,例如突然向相反的方向发射(在实际交通中仍然可能发生)以及许多小的弯路,这些弯路难以决定并且应该得到单独的答案。
由于您要求持续输入,您可能也有兴趣使用TraCI和FAQ on constant input flow进行实际操作。