Запрос Geofire в облачной функции Firebase

Извините за мой английский, я сомневаюсь, что можно сделать запрос geofire в Firebase Cloud Func с соответствующими key_enter и key_exited, чтобы сохранить список географических точек рядом с моей позицией?, извлеченный из нескольких сотен тысяч . Принимая во внимание, что все это происходит, когда пользователь обновляет свою геолокацию в базе данных node firebase в реальном времени, и этот список из сотен тысяч сводится к нескольким рядом с положением пользователя


person J0n4th4n_    schedule 23.04.2017    source источник
comment
Учитывая, что Geofire — это библиотека, созданная поверх Firebase JavaScript SDK, она может получить доступ к базе данных Firebase таким же образом. Запись в базу точно такая же. Но слушатели будут работать по-другому. Я рекомендую вам попробовать и отписаться, если вы застряли.   -  person Frank van Puffelen    schedule 23.04.2017


Ответы (2)


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

exports.testLocation = functions.database.ref('/tests/{test}').onWrite(event => {
    let data = event.data.val();
    console.log(data);
    console.log(event.params.test);
    if (data.location && data.location.coords) {
        console.log('Update GeoFire');
        geoBase = new geoBase(event.data.adminRef.parent.parent.child('/GeoFireTests'));
        geoBase.addLocation(event.params.test, [data.location.coords.latitude, data.location.coords.longitude]);
    }
});

Геофайр

let GeoFire = require('geofire');
module.exports = function(ref) {
    this.geoFire = new GeoFire(ref);
    this.addLocation = (key, location) => {
        this.geoFire.set(key, location).then(() => {
            console.log('Update succesfull');
        }).catch(error => {
            console.log(error);
        });
    }
}
person Jonas Tomanga    schedule 14.05.2017
comment
Привет, Джонас, не могли бы вы объяснить, что такое 2-я часть вашего ответа? - person shikhar bansal; 14.05.2017
comment
Извините, вторая часть - это отдельный модуль, который импортируется в первую часть. Он используется здесь: geoBase = new geoBase(). - person Jonas Tomanga; 15.05.2017

Вот как это выглядело бы без модуля

let functions = require('firebase-functions');

let GeoFire = require('geofire');

exports.testLocation = functions.database.ref('/items/{item}').onWrite(event => {
    let data = event.data.val();
    console.log(data);
    console.log(event.params.item);

    if (data.location && data.location.coords) {

       console.log('Update GeoFire');

       let ref = event.data.adminRef.parent.parent.child('/items_locations'));

      let key = event.params.test;
      let location = [data.location.coords.latitude, data.location.coords.longitude]);
      let geoFire = new GeoFire(ref);

      geoFire.set(key, location).then(() => {
         console.log('Update succesfull');
   }).catch(error => {
      console.log(error);
   });

  }
}
person Jonas Tomanga    schedule 15.05.2017