【问题标题】:Filter by closest in GeoFire setup在 GeoFire 设置中按最近的过滤器
【发布时间】:2017-08-29 19:28:12
【问题描述】:

我正在努力了解GeoFire,但我有点困惑GeoFire 是否适合我想要实现的目标。

我目前正在建立一个网站(Angular 2Typescript),该网站允许用户注册 > 创建个人资料并输入他们的位置。然后,这些数据将存储在他们的个人资料中,如下所示:

访问该数据的url如下:

https://my-website-f84a1.firebaseio.com/users<users auto generated key>/address

在本网站的搜索页面上,他们可以根据给定的属性过滤其他用户。

然后我想按最接近的方式对搜索结果进行排序,如下所示:

  1. 获取正在执行搜索的当前用户的位置
  2. 然后根据执行搜索的用户的位置计算搜索结果中每个用户的距离,然后按最近的顺序排序。

看起来很直截了当,好吧,我很困惑并且有一些问题。

  1. GeoFire 适合这个吗?
  2. 我是否需要在页面加载时加载所有用户位置并将其存储在 geoFire 中?

我不确定我当前用于存储用户地址信息的数据库结构是否适合GeoFire,但我们将不胜感激。

【问题讨论】:

    标签: firebase firebase-realtime-database geofire


    【解决方案1】:

    不清楚是否要限制返回结果的距离。 GeoFire 支持按半径进行地理查询,但这需要您指定所需的半径。如果您想返回所有匹配的结果,那么只需按与用户的距离对它们进行排序,那么您最好不要使用 GeoFire。

    这是我的建议;

    • 使用您引用的过滤属性查询数据。
    • 将每个项目添加到数组中。在数组中添加一个值,表示从用户位置到过滤项目位置的距离
    • 数组按距离排序,然后用数组将数据显示在屏幕上

    关于您的 Firebase 数据的一条评论;看起来您在实际记录中有您的密钥(“id”)。推荐的方法是结构化数据,以便将数据放在 JSON 层次结构中的键下方。这允许您优化检索,因为键是索引的并且是唯一的。这是我在我的一个应用程序中使用的数据库示例。

    + Cities
        + s0000001
            + nameEn: "Athabasca"
            + nameFr: "Athabasca"
            + provinceCode: "AB"
       + s0000002
            + nameEn: "Clearwater"
            + nameFr: "Clearwater"
            + provinceCode: "BC"
    

    【讨论】:

      猜你喜欢
      • 2013-11-27
      • 2022-12-12
      • 2018-09-26
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      相关资源
      最近更新 更多