将Geofire与现有的firebase数据库集成

时间:2016-11-25 13:49:52

标签: javascript firebase firebase-realtime-database geofire

我已经浏览了Geofire的github Fish示例,但仍不清楚如何在我的应用中实现它。  我的用例:我的应用程序向登录用户显示事件/聚会。目前在我的应用程序中,我在firebase ref(events)中有firebase监听器。

database.ref('events').orderByChild('startTime').on('value', (snapshot) => { 
 const feed = snapshot.val() || {}
})

目前,在初始加载时,客户端应用程序在事件ref处获取整个对象,然后每个事件数据在表中显示给用户(每行一个事件)。

据我所知,使用geofire,我可以使用set()函数保存每个事件键及其地理位置[lat,lng]。然后使用查询我可以检索落在指定半径内的事件键列表到用户当前位置(html5地理位置)。但是我如何处理密钥,因为没有附加数据,我是否设置了个人" on"事件参考中每个事件键的监听器?然后显示事件数据?

1 个答案:

答案 0 :(得分:2)

当您使用Geofire时,您的JSON树中最终会有两个分支:一个包含对象的地理数据,另一个包含实际数据。

objects
  objectId1: { ... }
  objectId2: { ... }
  objectId3: { ... }      
geodata
  objectId1: { ... }
  objectId2: { ... }
  objectId3: { ... }

当您针对geodata节点触发GeoQuery时,您将获得属于该查询范围内的对象的键。例如objectId2objectId3

然后使用该键在objects下查找相应的JSON对象。例如,使用key_entered时:

geoQuery.on("key_entered", function(key, location, distance) {
  console.log(key + " entered query at " + location + " (" + distance + " km from center)");
  ref.child("objects").child(key).once("value", function(snapshot) {
    console.log(snapshot.val());
  });
});