Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 在现有文档上使用geofire保存位置_Firebase_Firebase Realtime Database_Geofire - Fatal编程技术网

Firebase 在现有文档上使用geofire保存位置

Firebase 在现有文档上使用geofire保存位置,firebase,firebase-realtime-database,geofire,Firebase,Firebase Realtime Database,Geofire,我想要一个使用firebase实时数据库来存储某种事件。 事件在其生命周期中的状态可能会发生变化 我希望能够获取用户当前位置附近的所有活动事件 因为geofire似乎不允许我保存事件文档上的位置,所以我必须获取该位置附近的所有事件,然后根据状态和给定的事件ID进行过滤(该事件可能吗??) 有更好的办法吗 谢谢 Firebase实时数据库只能查询单个属性。GeoFire可以在两个轴(经度和纬度)上进行过滤这一事实已经相当神奇了(多亏了GeoHash的使用)。在混合中再增加一个价值超出了GeoFir

我想要一个使用firebase实时数据库来存储某种事件。 事件在其生命周期中的状态可能会发生变化

我希望能够获取用户当前位置附近的所有活动事件

因为geofire似乎不允许我保存事件文档上的位置,所以我必须获取该位置附近的所有事件,然后根据状态和给定的事件ID进行过滤(该事件可能吗??)

有更好的办法吗


谢谢

Firebase实时数据库只能查询单个属性。GeoFire可以在两个轴(经度和纬度)上进行过滤这一事实已经相当神奇了(多亏了GeoHash的使用)。在混合中再增加一个价值超出了GeoFire的用途

但实际上,只显示附近的活动事件非常简单:在数据库中保留一个位置/引用,其中只包含这些活动事件的位置。然后,您只需在该位置创建一个
GeoFire
对象,它将只查找附近的活动事件:


Geofire的工作原理是返回与您给出的坐标接近的内容。有关想法或入门模板,请查看。(如果您所在的区域没有会议,请单击地图图标上中,然后输入“旧金山”或“巴吞鲁日”。)

这个

下面是一段代码片段:

function loadQuery(lat,lng,today){
        //console.log('loadQuery function fired with ' + lat,lng,today);
        var geoKeys = [];
        var records=[];


        var geoQuery = geofire.query({
            center: [lat,lng],
            radius: radius
        });

        var onKeyEnteredRegistration = geoQuery.on("key_entered", function(key, location, distance) {
            geoKeys.push(key);
            //console.log('geoQuery event KEY ENTERED with key: ' + key);
        });

        // GeoKeys now in array
        var onReadyRegistration = geoQuery.on("ready", function() {

            //console.log('geoQuery event READY');

            if(geoKeys.length > 0){
                toastUp('Fetching Meetings...');
                // Get recordset for each key into sites array
                readFirebaseNodes(geoKeys).then(function(value) {
                    //filter for today
                    var todaysMeetings = dayFilter(today);
                    drop(todaysMeetings);
                }, function(err) {
                  //console.log(err); // Error!
                });
            } else {
                toastUp('No area meetings found.  You are encouraged to volunteer to add them.  Click <a href="/admin">Meetings Manager</a> to become a site administrator.');
                toastDown(2000);
            }
        });
    }
功能加载查询(lat、lng、今日){
//log('loadQuery函数通过'+lat,lng,今日]激发);
var geoKeys=[];
var记录=[];
var geoQuery=geofire.query({
中心:[拉丁美洲,液化天然气],
半径:半径
});
var onKeyEnteredRegistration=geoQuery.on(“输入键”),函数(键、位置、距离){
地理键。按(键);
//console.log('geoQuery事件键与键一起输入:'+键);
});
//地理键现在处于阵列中
var onReadyRegistration=geoQuery.on(“就绪”,函数(){
//log(“geoQuery事件就绪”);
如果(geoKeys.length>0){
toastUp(‘召集会议……’);
//将每个键的记录集获取到sites数组中
readFirebaseNodes(地理键)。然后(函数(值){
//今天的过滤器
var todaysMeetings=dayFilter(今天);
下降(今天的会议);
},函数(err){
//console.log(err);//错误!
});
}否则{
toastUp('未找到区域会议。鼓励您自愿添加这些会议。单击以成为站点管理员');
toastDown(2000年);
}
});
}
function loadQuery(lat,lng,today){
        //console.log('loadQuery function fired with ' + lat,lng,today);
        var geoKeys = [];
        var records=[];


        var geoQuery = geofire.query({
            center: [lat,lng],
            radius: radius
        });

        var onKeyEnteredRegistration = geoQuery.on("key_entered", function(key, location, distance) {
            geoKeys.push(key);
            //console.log('geoQuery event KEY ENTERED with key: ' + key);
        });

        // GeoKeys now in array
        var onReadyRegistration = geoQuery.on("ready", function() {

            //console.log('geoQuery event READY');

            if(geoKeys.length > 0){
                toastUp('Fetching Meetings...');
                // Get recordset for each key into sites array
                readFirebaseNodes(geoKeys).then(function(value) {
                    //filter for today
                    var todaysMeetings = dayFilter(today);
                    drop(todaysMeetings);
                }, function(err) {
                  //console.log(err); // Error!
                });
            } else {
                toastUp('No area meetings found.  You are encouraged to volunteer to add them.  Click <a href="/admin">Meetings Manager</a> to become a site administrator.');
                toastDown(2000);
            }
        });
    }