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

标签 javascript firebase firebase-realtime-database geofire

我已经浏览了 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时,您将获取属于该查询范围内的对象的键。例如 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());
  });
});

关于javascript - 将 Geofire 与现有的 firebase 数据库集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40806524/

相关文章:

javascript - if (json.RowKey != json.NewRowKey) 有什么问题

javascript - 如何在jquery中使用span类获取<td>值

firebase - 如何在 react-native-firebase 中禁用 recaptcha?

javascript - 查询对 firebase 中另一个对象内的日期进行排序

javascript - 识别字符串数字是否可以用 float (或 double )表示的最佳/最快方法是什么?

ios - Firebase undefined symbol

javascript - Firebase:如何在 React Native 中异步更新记录的值?

java - 为什么 Firebase 中的数据没有显示在我的 TextView 中?

firebase - Flutter 参数类型 'StreamTransformer<dynamic, dynamic>' 无法赋值给参数类型 StreamTransformer<QuerySnapshot List<Message>>

javascript - 当输入被清除时输入值重置