@Poligraphist

Как придумать алгоритм поиска свободных машин такси в радиусе координат пользователя?

Помогите разобраться с концепцией решения задачи.

На примере сервиса такси. Есть координаты человека. Как выбрать машинки, которые находятся в радиусе этого человека? Вопрос не в том что бы узнать входят ли координаты в нужный радиус, это просто. Вопрос в самой концепции.

Машинки постоянно перемещаются и раз в секунду обновляют свои координаты. В базе огромное количество машин, которые на линии.

Как вы видите схему работы с базой при такой задаче? Если есть формула которая сравнивает координаты двух объектов человека и машины и говорит о том, что объекты в нужном радиусе, мы же не можем постоянно проверять на вхождение в радиус всех машин в базе?

Какие есть идеи?
  • Вопрос задан
  • 260 просмотров
Решения вопроса 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
В Базе есть тип геоданные простой запрос вам отдаст все машины в нужном радиусе. Но лучше пользоваться сервисом маршрутов. Поясню почему. Допустим вы стоите на правом берегу в Воронеже , и делаете запрос с 2 километровым радиусом, он захватит машины с левого берега, которым ещё доехать до моста а потом к вам.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ComodoHacker
В базах создаются специальные структуры данных и индексы к ним, которые позволяют эффективно выполнять запросы вида "какие объекты находятся на расстоянии не более R от точки (X,Y)?". Например, если для упрощения вместо круга взять квадрат, хорошо работает R-Tree. Реализация для SQLite.

Более серьезное решение для PostgreSQL: postgis.refractions.net

Что касается постоянного перемещения машин, можно делать так. Запросить машины в меньшем радиусе, которые точно не уедут далеко в ближайшее время. Если ничего не нашлось, тогда увеличить радиус поиска.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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