在GeoFire设置

时间:2017-04-01 03:42:19

标签: firebase firebase-realtime-database geofire

我试图理解GeoFire并且我有点困惑,GeoFire会适合我想要实现的目标。

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

enter image description here

访问此数据的url如下:

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

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

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

  1. 抓住执行搜索的当前用户的位置
  2. 然后将搜索结果中每个用户的距离与执行搜索的用户的位置进行对比,然后按最近的顺序进行排序。
  3. 看起来非常直接,我很困惑并且有些疑问。

    1. GeoFire会适合这个吗?
    2. 我是否需要在页面加载时加载所有用户位置并存储在geoFire
    3. 我不确定用于存储用户地址信息的当前数据库结构是否适合GeoFire,但我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

这是我的建议;

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

关于您的Firebase数据的一条评论;看起来你在实际记录中有你的密钥(&#34; id&#34;)。建议的方法是构造数据,以便将数据放在JSON层次结构中的键下方。这使您可以优化检索,因为密钥已编制索引并且是唯一的。以下是我在其中一个应用中使用的数据库示例。

v = Application.Transpose(Application.Transpose(Range("A1:A5")))