我已经浏览了 github Fish 示例 Geofire但仍不清楚如何在我的应用程序中实现它。 我的用例:我的应用程序向登录用户显示事件/聚会。目前在我的应用程序中,我在 firebase ref(events) 处有 firebase 监听器。
database.ref('events').orderByChild('startTime').on('value', (snapshot) => {
const feed = snapshot.val() || {}
})
目前,在初始加载时,客户端应用程序在事件引用处获取整个对象,然后每个事件数据在表中向用户显示(每行一个事件)。
我知道,通过 geofire,我可以使用 set() 函数来保存每个事件键及其地理位置[lat, lng]。然后使用查询我可以检索落在用户当前位置(html5 地理位置)指定半径内的事件键列表。但是,由于没有附加数据,我该如何处理这些键,我是否要在事件引用中为每个事件键设置单独的“打开”监听器?然后显示事件数据?
最佳答案
使用 Geofire 时,JSON 树中最终会出现两个分支:一个包含对象的地理数据,另一个包含实际数据。
objects
objectId1: { ... }
objectId2: { ... }
objectId3: { ... }
geodata
objectId1: { ... }
objectId2: { ... }
objectId3: { ... }
当您针对geodata
节点触发GeoQuery时,您将获取属于该查询范围内的对象的键。例如 objectId2
和 objectId3
。
然后,您可以使用该键在 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());
});
});
关于javascript - 将 Geofire 与现有的 firebase 数据库集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40806524/