Firebase GeoFire,从我当前位置检索具有特定半径的帖子

Posted

技术标签:

【中文标题】Firebase GeoFire,从我当前位置检索具有特定半径的帖子【英文标题】:Firebase GeoFire, retrieve posts with a specific radius from my current position 【发布时间】:2018-09-22 14:28:52 【问题描述】:

是否可以从我当前位置获取存储在具有特定半径的 firebase 数据库中的所有 GeoFire 帖子?

示例:如果进入我的数据库节点,我有 10 个帖子,并且只有 3 个从我当前位置有效,半径为 0.5 公里,我将获得 3 个帖子。

这是我的数据库的结构:


  "posts" : 
    "-L9qTBD1WPgF0h2ungz-" : 
      "desc" : "lorem ipsum",
      "isActive" : true,
      "idGeofire" : "ID1GEOFIRE"
    ,
    "-L9qTDImKE4HHgxH5YDs" : 
      "desc" : "lorem ipsum",
      "isActive" : true,
      "idGeofire" : "ID2GEOFIRE"
    
  ,
  "geofire" : 
    "ID1GEOFIRE" : 
      "IdPost" : "L9qTBD1WPgF0h2ungz",
      "l" : 
        "0" : 46.632347,
        "1" : 3.6354347
      
    ,
    "ID2GEOFIRE" : 
      "IdPost" : "L9qTDImKE4HHgxH5YDs",
      "l" : 
        "0" : 25.6314647,
        "1" : 50.6369447
      
    ,
  

【问题讨论】:

【参考方案1】:

要获取某个位置特定范围内的节点,您将use a geoquery 如文档所示:

// creates a new query around [37.7832, -122.4056] with a radius of 0.6 kilometers
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(37.7832, -122.4056), 0.6);

然后您将收到范围内节点的onKey... 事件,例如对于每个帖子,您都会得到一个onKeyEntered

geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() 
    @Override
    public void onKeyEntered(String key, GeoLocation location) 
        System.out.println(String.format("Key %s entered the search area at [%f,%f]", key, location.latitude, location.longitude));
    

【讨论】:

以上是关于Firebase GeoFire,从我当前位置检索具有特定半径的帖子的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Real-time Firebase 检索使用 Geofire 设置的多个位置并在 Android Studio 的地图上显示它们?

使用 geofire 仅检索 3 英里内的用户列表

如何在没有 Geofire 的情况下将位置对象保存在 Firebase 中?

geofire android 存储和检索位置并将其显示在地图上

按键检索 Firebase 对象

如何让用户在我在 geofire、Firebase 的位置附近