Фильтровать по ближайшему в настройках GeoFire

Я пытаюсь разобраться в GeoFire. и я немного запутался в том, будет ли GeoFire подходить для того, чего я пытаюсь достичь.

В настоящее время я создаю веб-сайт (Angular 2, Typescript), этот веб-сайт позволяет пользователям зарегистрироваться> создать профиль и указать свое местоположение. Затем эти данные сохраняются в их профиле, как показано здесь:

введите здесь описание изображения

url для доступа к этим данным выглядит следующим образом:

https://my-website-f84a1.firebaseio.com/users<users auto generated key>/address

На странице поиска этого веб-сайта они могут фильтровать других пользователей по заданным свойствам.

Затем я хотел бы отсортировать результаты поиска по ближайшему первому, что будет следующим:

  1. Получить местоположение текущего пользователя, выполняющего поиск
  2. Затем сопоставьте расстояние каждого пользователя в результатах поиска с местоположением пользователя, выполняющего поиск, а затем упорядочите по ближайшему.

Кажется, это довольно прямолинейно, ну, я в замешательстве и у меня есть вопрос.

  1. Подойдет ли для этого GeoFire?
  2. Нужно ли мне загружать все пользовательские местоположения при загрузке страницы и сохранять их в geoFire?

Я не уверен, подходит ли моя текущая структура базы данных для хранения информации об адресах пользователей для GeoFire, но буду признателен за любую помощь.


person Code Ratchet    schedule 01.04.2017    source источник


Ответы (1)


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

Вот что я предлагаю;

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

Один комментарий о ваших данных Firebase; похоже, что у вас есть ключ («id») в реальной записи. Рекомендуемый способ — структурировать данные так, чтобы они располагались ниже ключа в иерархии JSON. Это позволяет оптимизировать поиск, поскольку ключи проиндексированы и уникальны. Вот пример базы данных, которую я использую в одном из своих приложений.

+ Cities
    + s0000001
        + nameEn: "Athabasca"
        + nameFr: "Athabasca"
        + provinceCode: "AB"
   + s0000002
        + nameEn: "Clearwater"
        + nameFr: "Clearwater"
        + provinceCode: "BC"
person Derek    schedule 29.08.2017