Здравствуйте. Не подскажете, как лучше всего можно реализовать сортировку с помощью Firebase по самой ближашей локации от текущего юзера? То есть нужно брать локацию текущего юзера и сортировать всех остальных юзеров по самой ближайшой локации к текущему. Как это может быть реализовано?
Сортировка в Firebase по локации
Если вы используете FireStore, то можете сразу делать фильтрованный запрос: например запросить по долготе и широте не больше какого-то числа в зависимости от вашей позиции, чтобы не тянуть всех юзеров. Но сортировать да, уже на устройстве.
Спасибо. К примеру, мне нужно сделать запрос на какое-то определенное количество килимометров от текущего юзера по широте и долготе, скажем на 50км. Как это можно сделать, не подскажете? И как потом можно отсортировать список полученных юзеров?
В основном расстояние вы можете вычислять на устройстве, что проще и понятнее.
Но есть и способ сделать запрос к базе на прямую.
Тут пример на SQL.
Спасибо, а если на устройстве, то как это можно сделать? Я сохраняю в Firebase Firestore latitude и longitude по каждому юзеру. Как мне вытащить эти данные для определенного расстояния, скажем на 50км от текущей локации, а затем отсортировать их?
Вытаскиваете все записи, смотрите по первой ссылке как выглядит модель, создаете массив всех записей и потом обычный фильтр.
В этом варианте есть минус, каждый раз нужно будет доставать все записи.
А как можно вытаскивать юзеров только по определенному радиусу из Firebase Firestory, если я знаю только их latitude и longitude? Скажем, я хочу доставать юзеров, которые находятся только на расстоянии 50км? Это возможно?
Я же скинул ссылку как можно сформировать запрос.
Возможно вам повезло, а может и нет, но я нашел вот это
https://firebase.google.com/docs/firestore/solutions/geoqueries#swift
Все не читал, но очень похоже что у них это все предусмотрено.
Ну тут сразу надо понимать, что величина градуса долготы (и его дробные части) в километрах будет зависеть от широты - чем ближе к экватору, тем градус будет равен большему количеству километров. Так что примите для себя какое-то среднее значение разницы долготы от ваших координат, которое надо грузить и всё.
В geoqueries это все рассказывается и они там же показывают как отбросить ложно положительные результаты.