2017-04-01 52 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"