Получить список ресторанов в непосредственной близости от пользователя, используя 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);
});