LINKeRxUA
@LINKeRxUA
web dev

Нужен совет. Алгоритм поиска дозагрузок. Какие ваши предложения по архитектуре СУБД?

Никогда не работал раньше с подобными задачами . Нужен совет!

Есть код, который с использует 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км)
valid-examples.png

Что не будет работать в таком случае
1) Плохо будет считать на короткие расстояния
2) Существует проблема когда навигация проложит маршрут по паралельной улице.
3) Еще масса всего
Визуализация:
invalid-examples.png
Собственно говоря, какие есть соображения как проектировать такие системы! Спасибо за любой совет!
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Осваивайте операцию Buffer - и будет понятно, рядом маршруты проходят или нет.
С противоположным направлением вообще не понял в чём сложность. Если ты должен загрузить попутку на 65%, а выгрузить на 30%, то очевидно что не получится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MaximaXXl
Это больше философский вопрос.
По Вводным данным, как бы строил я:
Есть маршрут A -> B
Есть товар С -> D
Есть авто которое едет E
Я бы получал маршрут из карты если есть возможность E -> B и (E -> C -> D -> B) и (E -> C -> B -> D)
Если разница в маршрутах не привышает ...% то выбираем лучший маршрут и догружаем
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы