2017-04-03 92 views
0

如何从包含以下内容的历史数据模拟连续交通流: 1.车辆ID; 2.速度; 3.坐标SUMO - 模拟交通场景

在不知道每个车辆ID的路由。

回答

1

这是一个常见问题,但可能以前没有回答过。不幸的是,答案在很大程度上取决于您输入数据的质量,主要取决于您的位置更新的频率/距离(如果每个数据有时间戳,这也会有所帮助),以及这些位置的精确度与您的街道网络相匹配。在最好的情况下,街道网络中每条路线的边缘都会有位置更新,您可以通过将位置映射到街道来简单地读取路线。这种映射可以使用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生活。

+0

TBH,我还是这个新手。有时间戳。那么它将如何改变这种状况呢?谢谢。 – skw1990

+0

时间戳和速度有助于估计行进距离,因此您知道搜索下一个边缘时的最大范围(假设您的最后猜测是正确的) – Michael