@nakem

Как хранить и сравнивать локации?

Собираюсь начать писать свой пет проджект. Это типа сервис знакомств. Буду писать на го, сейчас проектирую как это все будет выглядеть.

При регистрации юзера я буду выдавать всем другим юзерам в радиусе, например, 50км рейтинг совместимости. Одним из самых главных весомых параметров будет локация юзера. То есть, нужна какая-то сущность в базе locations_pool - это будет пул локаций, которые близко находятся друг к другу. Как эти пулы сформировать? Может быть, пул == область. И вообще в правильном ли направлении мыслю? Накидайте идеи плз.

И вообще ходить по базе сравнивать локации множества людей друг с другом кажется очень медленно, но не смог придумать ничего лучше, это вроде единственный вариант, чтоб выдавать какие-то рейтинги и рекомендовать людей в сервисах знакомств.
  • Вопрос задан
  • 163 просмотра
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka
Токсичный шарпист
Во многих СУБД есть расширения для работы с пространственными и гео-данными.
Например в postgres - PostGIS.
Тебе нужно просто для каждого пользователя определить геолокацию как широту-долготу, а поиск в определённом радиусе уже будет реализован в postgis.

Это будет сильно быстрее чем "сравнить всех со всеми" благодаря специальным индексам
Ответ написан
Комментировать
@dmshar
Имея геолокацию найти расстояние между двумя точками - задача элементарная (вспоминаем школьную геометрию). Соответственно найти несколько точек, у который расстояния то-ли минимальное, то-ли не превышает заданную величину (те-же 50 км.) также особого труда не представляет. Хотя что делать, если населенные пункты А и В находятся в 50км, но между ними курсирует скоростной поезд, а пункты А и С - в трех километрах, но через высокогорный перевал или реку - с объездом в 100 км (да, бывает и так) ? В общем, мне кажется поиск по геолокации - не лучший способ решения проблемы.

А вот искать "по области" (или по населенному пункту) - уже перспективнее. Наиболее просто способ - "в лоб" выяснять у пользователя из какой он области. И тогда проблем нет. Но если исходить из геолокации - то проблема серьезная. Надо где-то искать соответствующую базу (по сути границ областей), потом решать задачу, в какую область угодила точка.... В общем весьма муторно.
Можно, например, спрашивать город, от которого по имеющейся открытой информации переходить к области. Или по области находить города - в том числе близлежайшие - такая карта расстояний имеется (правда, не заю, в свободном-ли доступе). На худой конец искать API Google-maps и тянуть информацию из него.

В общем, лучше для пет-проекта пока реализовать более простой подход (с явным указанием локации - населенного пункта), а потом, если сохраниться желание над проектом работать и его развивать - усложнять и вводить поиск уже по геолокации.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы