Никогда не работал раньше с подобными задачами . Нужен совет!
Есть код, который с использует geocoding по 2м адресам и open street map для построения маршрута.
В колонку json - пишется ответ от API open street map.
Такие маршруты сохраняются в табличку
transportation_orders (id, user_id, driver_id, lat_from, lon_from, lat_to, lon_to, json)
1, 1, null, 50.11123, 30.2524, 35.11123, 10.2524, {...}
По этому маршруту едет водитель, его нужно информировать, если есть попутная дозагрузка!
Как это работает сейчас:
При сохранении данных в
transportation_orders
, все координаты навигации с "A" в "B" обрабатываются до точности к 0.01 от lat, lon. и сохраняются в
order_waypoints (order_id, lat, lon, progress_from, progress_to )
.
1, 50.11, 30.25, 0% , 0,1222%
1, 50.12, 30.25, 0,1222% , 0,2233%
...
1, 35.11, 10.24, 98.881% , 99.594%
1, 35.11, 10.25, 98.594% , 100%
.
В свою очередь 1 такая точка это квадрат около 1100м Х 1100м.
Алгоритм поиска дозагрузок это - выборка дозагрузок, которые проходят через те же order_waypoints (inner join) но с условием по прогресса 0..25% и 75..100% (т.е. хотя бы 1 точка с 25% начала маршрута и 1 точка с 25% конца должна наложится на основной маршрут).
Для длинных маршрутов с города в город все считается отлично (Так как маршрут сойдется на одной и той же трассе если он попутный ). Вот пример чисто для визуализации правильности работы моего подхода:
(сетка - это мои квадраты 1.1кмХ1.1км)
Что не будет работать в таком случае
1) Плохо будет считать на короткие расстояния
2) Существует проблема когда навигация проложит маршрут по паралельной улице.
3) Еще масса всего
Визуализация:
Собственно говоря, какие есть соображения как проектировать такие системы! Спасибо за любой совет!