2016-06-11 2 views
2

Я переношу приложение, использующее Mysql для firebase, и мне удалось перенести его почти все, просто пропуская часть поиска, я не совсем понял, как это работает. Я пытаюсь сделать этот запрос ниже в firebase.Поиск в Firebase на основе расстояния

SELECT *, (6371 * acos(cos(radians(?)) * cos(radians(latitude)) * cos(radians(?) - radians(longitude)) + sin(radians(?)) * sin(radians(latitude)))) AS distance FROM usuario ORDER BY distance 

enter image description here

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

Примечание. Это не тот же запрос, который я использую в своем приложении, который я только что нашел в google и не знаю, работает ли это, но вы можете получить представление о том, что я пытаюсь сделать. Примечание ²: английский не является родным языком: P

ответ

4

Пример SQL-запроса, который вы предоставили, использует возможность SQL, которая не существует в Firebase: возможность вычисления выражения с использованием значений столбцов для каждой строки таблицы а затем использовать значение этого выражения для фильтрации и сортировки результата запроса.

Я не вижу способ использовать Firebase для выполнения типа запроса, который вы хотите.

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

+0

Спасибо за ответ. Я думаю, что этот lib больше не работает, потому что я пытался его реализовать, и он просит реализовать «Firebase.setAndroidContext()», который является старым способом использования Firebase. – Stark

+0

Вы правы. [Обновление продолжается] (http://stackoverflow.com/questions/37625887/how-to-update-geofire-library-to-the-latest-version), но он еще не готов. –

3

Я согласен с Qbix и обычно размещаю это как комментарий, но я хочу, чтобы комментарий Geohash не затерялся в мелочном тасовании.

GeoFire использует коды Geohash для создания своих ключей и позволяет использовать диапазон. Для базовых приложений это может быть хорошо, но второе, что вы выходите за пределы США, создает много проблем, потому что это плохо работает вокруг экватора и Prime Meridian (Великобритания). См. Wikipedia Page on Geohash для деталей, в частности: Edge case locations close to each other but on opposite sides of the 180 degree meridian will result in Geohash codes with no common prefix (different longitudes for near physical locations)..

Firebase - это удивительный продукт, но не инструмент одного размера. Если вам нужен хороший поиск/сопоставление на основе Geo, используйте такой инструмент, как ElasticSearch, MySQL, Algolia и т. Д., Которые поддерживают его напрямую. Уменьшение количества компонентов в таких случаях не уменьшает сложность, оно увеличивает его.

Смежные вопросы