Как я могу смоделировать непрерывный транспортный поток на основе исторических данных, которые включают: 1. Идентификатор транспортного средства; 2. Скорость; 3. Координаты
не зная маршруты каждого идентификатора транспортного средства.
Как я могу смоделировать непрерывный транспортный поток на основе исторических данных, которые включают: 1. Идентификатор транспортного средства; 2. Скорость; 3. Координаты
не зная маршруты каждого идентификатора транспортного средства.
Это часто задаваемые вопросы, но, вероятно, здесь раньше не было ответа. К сожалению, ответ во многом зависит от качества ваших входных данных, главным образом от частоты / расстояния обновлений вашего местоположения (было бы также полезно, если бы для каждого элемента данных была указана временная метка) и от того, насколько точно местоположения соответствуют вашей уличной сети. В лучшем случае есть обновление местоположения на каждом краю маршрута в уличной сети, и вы можете просто считать маршрут, сопоставив местоположение с улицей. Это сопоставление может быть выполнено с помощью python sumolib, поставляемого с sumo:
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 -n myNet.net.xml -r myRoutesWithGaps.rou.xml -o myRepairedRoutes.rou.xml --repair
Последний случай значительно сложнее обнаружить и исправить, потому что он во многом зависит от вашего определения неправильной кромки. Есть почти очевидные случаи, такие как внезапное столкновение с противоположным направлением (что все еще может произойти в реальном движении) и множество небольших объездов, которые трудно решить и которые заслуживают отдельного ответа.
Поскольку вы запрашиваете постоянный ввод, вам также может быть интересно сделать это в реальном времени с помощью TraCI и в этот FAQ по постоянному входному потоку.