使用Firebase-GeoFire

时间:2016-07-26 16:16:30

标签: javascript firebase firebase-realtime-database geofire

我有一个餐厅列表,每个餐厅都有一个固定的位置,存储在GeoFire中。现在我想在固定的用户位置半径内显示餐馆。我怎样才能使用GeoFire实现这一目标。这里的文档https://github.com/firebase/geofire-js/blob/master/docs/reference.md#geofiresetkeyorlocations-location主要提出了geofire' key'正在移动,这是使用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);

密钥打印在控制台上,但不会被推送到filteredRest数组。

我希望实现'示例用法'在以下链接中: https://github.com/firebase/geofire-java#example-usage

有类似的问题,但大多数是在ios / swift中,答案不是很有用。我使用的是GeoFire-JavaScript。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

要处理所有初始密钥同步的时间,请将代码放入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);
});