Сортировка в Firebase по локации


#1

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


#2

#3

Если вы используете FireStore, то можете сразу делать фильтрованный запрос: например запросить по долготе и широте не больше какого-то числа в зависимости от вашей позиции, чтобы не тянуть всех юзеров. Но сортировать да, уже на устройстве.


#4

Спасибо. К примеру, мне нужно сделать запрос на какое-то определенное количество килимометров от текущего юзера по широте и долготе, скажем на 50км. Как это можно сделать, не подскажете? И как потом можно отсортировать список полученных юзеров?


#5

Да, но как именно можно совместить это с Firebase?


#6

В основном расстояние вы можете вычислять на устройстве, что проще и понятнее.
Но есть и способ сделать запрос к базе на прямую.


Тут пример на SQL.


#7

Спасибо, а если на устройстве, то как это можно сделать? Я сохраняю в Firebase Firestore latitude и longitude по каждому юзеру. Как мне вытащить эти данные для определенного расстояния, скажем на 50км от текущей локации, а затем отсортировать их?


#8

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


#9

А как можно вытаскивать юзеров только по определенному радиусу из Firebase Firestory, если я знаю только их latitude и longitude? Скажем, я хочу доставать юзеров, которые находятся только на расстоянии 50км? Это возможно?


#10

Я же скинул ссылку как можно сформировать запрос.

Возможно вам повезло, а может и нет, но я нашел вот это
https://firebase.google.com/docs/firestore/solutions/geoqueries#swift
Все не читал, но очень похоже что у них это все предусмотрено.


#11

Ну тут сразу надо понимать, что величина градуса долготы (и его дробные части) в километрах будет зависеть от широты - чем ближе к экватору, тем градус будет равен большему количеству километров. Так что примите для себя какое-то среднее значение разницы долготы от ваших координат, которое надо грузить и всё.


#12

В geoqueries это все рассказывается и они там же показывают как отбросить ложно положительные результаты.


#13

ну в общем решения есть :slight_smile: