2017-04-01 57 views
0

我试图让我的头部位于GeoFire,并且我有点困惑,因为GeoFire适合我试图实现的目标。通过GeoFire设置中的最接近的筛选器

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

enter image description here

url访问此数据如下:

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

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

话,我想通过最近的搜索结果中第一个排序,这将是如下:

  1. 抓住当前用户的位置,谁是执行搜索
  2. 然后锻炼各的距离搜索结果中的用户与正在执行搜索的用户的位置进行比较,然后按最接近的顺序排序。

似乎很直接的权利,以及我很困惑,并有一些问题。

  1. 请问GeoFire是否适合这?
  2. 我是否需要加载页面加载的所有用户位置并存储在geoFire

我不确定如果我目前的数据库结构存储用户地址信息适合GeoFire,但任何帮助,将不胜感激。

回答

0

目前还不清楚是否要限制返回结果的距离。 GeoFire支持以半径表示的地理查询,但需要您指定所需的半径。如果您想要返回所有匹配的摘要,那么只需按距离用户的顺序排列它们,那么最好不要使用GeoFire。

这是我的建议;

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

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

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