Palych_tw
@Palych_tw
Типа веб-разработчик

Как бы вы сделали бэкенд для такого приложения?

Суть вопроса. Нужно сделать бэк для приложения. Помимо всего прочего есть такая задача. Клиент, например, каждые 30 секунд будет присылать по API данные о своем положении, эти координаты записываются в БД. Потом прислылается запрос показать всех, кто рядом, например в 100 метрах. Понятно, что перебирать все координаты в БД и сравнивать с координатами клиента - это чушь.

Отсюда вопрос, как такое можно реализовать.

Просьба не разводить холивар по поводу выбора языка)). Это не проект на продажу, а учебный проект. И делаться точно будет на PHP, скорее всего на Laravel.

Спасибо
  • Вопрос задан
  • 1881 просмотр
Решения вопроса 4
gadfi
@gadfi
https://gamega.org
postgresql умеет работать с геоданными, я такое делал даже на обрезном sqlite на android, для учебного проекта сгодится любая бд
Ответ написан
sergiks
@sergiks Куратор тега PHP
♬♬
«В радиусе 100 метров» это круг, вписанный в квадрат 200x200 метров.
Поэтому выбрать только те, что находятся по X-координате в +-100 метрах. Из них только те, что по Y-координате в +-100 метрах. Из этой выборки проверить каждый на расстояние от точки центра.

Если в БД сделать индексы по X и Y координатам, такая выборка будет быстрой.

Понадобится вычислять координаты углов квадрата, переводя широту, долготу в метры (+–100) и обратно в широту, долготу. Поможет формула.

Можно решить задачу целиком в MySQL – в презентации есть пример запроса и его дальнейшей оптимизации.
Ответ написан
zoonman
@zoonman
⋆⋆⋆⋆⋆
Для этой задачи идеально подходит MongoDB. В ней просто указываешь точку и радиус https://docs.mongodb.com/v3.2/reference/operator/q...
С точки зрения производительности здесь аналогов практически нет, особенно, если вы можете позволить себе InMemory storage.
Ответ написан
Комментировать
@stoitli
Это называется Spatial Index.
Их поддерживают очень и очень многие современные СУБД.
;)))
MySQL, PostgreSQL, MS SQL, Oracle, Tarantool, Redis и т.д.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
freeExec
@freeExec
Участник OpenStreetMap
Не совсем то что хотел автор, но вдруг кто-то захочет узнать как это работает изнутри
https://medium.com/@agafonkin/a-dive-into-spatial-...
Ответ написан
Комментировать
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Индексировать значения по тому, в какой они квадрат карты входят. Т.е. разбиваем всю карту на области(квадраты) определённого размера и при поступлении данных от клиента проверяем, в какой квадрат эти данные входят. Когда же клиент запрашивает кого-то в радиусе, отдаём ему данные из соседних N квадратов, если нужно точно, то пробегаемся по этим данным и считаем расстояние до каждого.
Ответ написан
Ваш ответ на вопрос

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

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