【发布时间】:2016-07-26 16:16:30
【问题描述】:
我有一个餐厅列表,每个餐厅都有一个存储在 GeoFire 中的固定位置。现在我想在用户位置的固定半径内显示餐厅。我如何使用 GeoFire 来实现这一点。这里的文档https://github.com/firebase/geofire-js/blob/master/docs/reference.md#geofiresetkeyorlocations-location 主要建议使用 key_entered、key_exited 等处理 geofire“键”移动的解决方案。但我无法弄清楚如何访问附近的键。
我的控制器代码如下:
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);
密钥打印在控制台上,但未推送到过滤的Rest 数组。
我希望在以下链接中实现“示例用法”: https://github.com/firebase/geofire-java#example-usage
有类似的问题,但大多数都在 ios/swift 中,答案不是很丰富。我正在使用 GeoFire-JavaScript。任何帮助将不胜感激。
【问题讨论】:
-
key_entered事件也会针对非移动键触发。它将针对范围内的所有键“立即”触发,然后针对进入该范围的每个键触发。你有没有尝试过? -
好的,但这会让我访问所有触发事件的键吗?不完全确定返回的 GeoCallbackRegistration 是什么。
-
您必须通过挂钩
key_entered来构建密钥集合。如果您想知道所有 initial 键何时被触发,您可以挂钩ready事件:github.com/firebase/geofire-js/blob/master/docs/… -
我可以通过 key_entered 访问单个密钥,但我无法将这些密钥存储为一个集合。你能举出任何例子吗?我认为这个问题是由于 firebase 的异步性质造成的。
-
确实如此。在这个阶段,您可以提供一个minimal, complete example 来重现您的问题。在 Stack Overflow 上,提供示例链接是题外话。
标签: javascript firebase firebase-realtime-database geofire