Получить список ресторанов в непосредственной близости от пользователя, используя Firebase-GeoFire

У меня есть список ресторанов, каждый из которых имеет фиксированное местоположение, которое хранится в GeoFire. Теперь я хочу отображать рестораны в пределах фиксированного радиуса расположения пользователя. Как я могу добиться этого с помощью GeoFire. Документация здесь, https://github.com/firebase/geofire-js/blob/master/docs/reference.md#geofiresetkeyorlocations-location основном предлагает решения, в которых перемещаются "ключи" geofire, которые обрабатываются с использованием key_entered, key_exited и т. Д. Но я не могу понять, как получить доступ к ключам в непосредственной близости.

Мой код контроллера выглядит так:

var ref = firebase.database().ref();
var geoFire = new GeoFire(ref.child("geofire"));
var posOptions = {timeout: 10000, enableHighAccuracy: false};
$cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) {
$scope.rest= [];
$scope.filteredRest = [];
var geoQuery = geoFire.query({
  center: [position.coords.latitude,  position.coords.longitude],
  radius: 15
});
geoQuery.on("key_entered", function(key, location, distance) {
  console.log(key);
  $scope.filteredRest.push(key);
});
geoQuery.on("ready", function() {
  geoQuery.cancel();
});
console.log($scope.filteredRest);

Ключ печатается на консоли, но не помещается в массив FilterRest.

Я пытаюсь добиться "Пример использования" по следующей ссылке: https://github.com/firebase/geofire-java

Есть похожие вопросы, но большинство из них в ios / swift, и ответы не очень информативны. Я использую GeoFire-JavaScript. Любая помощь будет оценена.

1 ответ

Решение

Для обработки, когда все начальные ключи синхронизированы, поместите код в ready обработчик. Например, скажем, вы хотите напечатать все начальные ключи:

var ref = firebase.database().ref();
var geoFire = new GeoFire(ref.child("geofire"));
var posOptions = {timeout: 10000, enableHighAccuracy: false};
$cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) {
$scope.rest= [];
$scope.filteredRest = [];
var geoQuery = geoFire.query({
  center: [position.coords.latitude,  position.coords.longitude],
  radius: 15
});
geoQuery.on("key_entered", function(key, location, distance) {
  $scope.filteredRest.push(key);
});
geoQuery.on("ready", function() {
  geoQuery.cancel();
  console.log($scope.filteredRest);
});
Другие вопросы по тегам