2017-04-03 103 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