使用 Firebase-GeoFire 获取用户附近的餐馆列表
Fetch list of restaurants in user's proximity using Firebase-GeoFire
我有一个餐厅列表,每个餐厅都有一个固定位置,存储在 GeoFire 中。现在我想在用户位置的固定半径内显示餐厅。如何使用 GeoFire 实现此目的。这里的文档 https://github.com/firebase/geofire-js/blob/master/docs/reference.md#geofiresetkeyorlocations-location 主要建议使用 key_entered、key_exited 等处理 geofire 'keys' 移动的解决方案。但我无法弄清楚如何访问附近的密钥。
我的控制器代码如下:
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 数组。
我希望在以下 link 中实现 'Example usage':
https://github.com/firebase/geofire-java#example-usage
有类似的问题,但大部分都在ios/swift中,答案不是很翔实。我正在使用 GeoFire-JavaScript。任何帮助将不胜感激。
要在所有初始键同步时处理,请将代码放入 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);
});
我有一个餐厅列表,每个餐厅都有一个固定位置,存储在 GeoFire 中。现在我想在用户位置的固定半径内显示餐厅。如何使用 GeoFire 实现此目的。这里的文档 https://github.com/firebase/geofire-js/blob/master/docs/reference.md#geofiresetkeyorlocations-location 主要建议使用 key_entered、key_exited 等处理 geofire 'keys' 移动的解决方案。但我无法弄清楚如何访问附近的密钥。
我的控制器代码如下:
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 数组。
我希望在以下 link 中实现 'Example usage': https://github.com/firebase/geofire-java#example-usage
有类似的问题,但大部分都在ios/swift中,答案不是很翔实。我正在使用 GeoFire-JavaScript。任何帮助将不胜感激。
要在所有初始键同步时处理,请将代码放入 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);
});