Расположение запроса по радиусу с GeoFire - PullRequest
0 голосов
/ 26 августа 2018

Я знаю, что это основной вопрос, но, тем не менее, у меня много проблем с ним.

У меня есть база данных Firebase, в которой хранятся события сообщества.Каждый узел события имеет узел географического местоположения (созданный с помощью GeoFire), который называется eventPlace (см. Скриншот ниже).

Используя GeoFire (и javascript), как бы я запросил всю базу данных и получил всесобытия в определенном месте / радиусе?Возможно ли это, учитывая способ хранения данных?Или мне нужно переместить все узлы местоположения в общий узел (eventPlaces ??) и запросить этот единственный родительский узел?

Обратите внимание, что я не ищу данные в реальном времени.Эти местоположения сохраняются ранее и меняются не очень часто.

Заранее спасибо ...

enter image description here

1 Ответ

0 голосов
/ 01 сентября 2018

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

Вы должны использовать geofire и отдельную «коллекцию» (назовите ее eventPlaces )

var firebaseRef = firebase.database().ref('eventPlaces');
var geoFire = new GeoFire(firebaseRef);

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

geoFire.set('-K_Pp-3RBJ58VkHGsL5P', [40.607765, -73.758949]);

Ваша RTDB Firebase будет выглядеть следующим образом:

{
   'events': {
        '-K_Pp-3RBJ58VkHGsL5P': {
            // All your data here
        }
    },
   'eventPlaces': {
        '-K_Pp-3RBJ58VkHGsL5P': {
            'g': 'dr5x186m7u',
            'l': [40.607765, -73.758949]
        }
    }
}

Итак, наконец, когда вы выполните запрос к вашему geoFire:

geoFire.query({
  center: [40.607765, -73.758949],
  radius: 10
}).on('key_entered', (key, location, distance) => {
  console.log(key + ' entered query at ' + location + ' (' + distance + ' km from center)');
});

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

...