2017-08-28 46 views
0

我已經使用GeoFire從我的Firebase數據庫中獲取基於位置的數據。我知道如果我在查詢中設置的半徑較小,那麼我可以快速加載數據,但我的要求是我想根據位置來縮短數據,因此最近的記錄首先顯示,等等。所以我已經通過GeoFire查詢當前位置的總地球半徑,因爲我需要所有的數據。但是我不知道如何應用GeoFire分頁,因此在將來當Firebase數據庫中有更多記錄可用時,我當前的實現肯定需要更多時間才能加載。我可以在GeoFire Query上應用分頁以減少加載時間嗎

下面是我用來獲取基於位置的記錄的代碼片段。

 let eartchRadiusInKms = 6371.0 
     let geoFire = GeoFire(firebaseRef: databaseRef.child("items_location")) 

     let center = CLLocation(latitude: (self.location?.coordinate.latitude)!, longitude: (self.location?.coordinate.longitude)!) 
     let circleQuery = geoFire?.query(at: center, withRadius: eartchRadiusInKms) 

     if CLLocationCoordinate2DIsValid(center.coordinate) { 
      circleQuery?.observeReady({ 

       let myPostHandle : DatabaseHandle = circleQuery?.observe(.keyEntered, with: { (key: String?, location: CLLocation?) in 

        // Load the item for the key 
        let itemsRef = self.databaseRef.child("items").child(key!) 
        itemsRef.observeSingleEvent(of: .value, with: { (snapshot) in 
         // Manage Items data 
        }) 
       }) 
      }) 

     } 

那麼GeoFire可以分頁嗎?或者我必須使用一些不同的機制,任何人都可以請這方面的建議嗎?

+0

我所知分頁是默認不支持GeoFire,所以你將不得不使用自己的機制。一種解決方案是在第一次呼叫時使用小半徑,並在每次下一次呼叫時增加它。我沒有看到任何其他乾淨的解決方案。我們也想在我們的項目中使用GeoFire,但由於我們的需求非常緩慢,並且使用了太多的調用,所以我們最終編寫了自己的API。 – ZassX

回答

3

我遇到過類似的問題,我實際上首先加載了一個小半徑,然後增加了半徑並在後臺服務中加載了另一塊數據。在電話會議結束我用

collectionView.reloadData()` 

這裏是你在geofire如何查詢

self.circleQuery = self.geoFire?.query(at: myLocation, withRadius: myRadius) 

self.circleQuery?.observe(.keyEntered, with: { (key: String?, location: CLLocation?) in .... 

退房geofire文檔中此功能重新加載我的收藏查看數據。它在後臺保留新輸入的位置的軌跡。現在,只要你想分頁考慮的tableView的例子,你可以把這種對onScroll

myRadius = myRadius + 1000 //或任意數量的增加半徑

由於keyEntered觀察者已經設置所以它會回報你回新結果。只需將它們添加到您的列表,並就更新表/集合視圖

+0

你可以請分享一些代碼片段,所以我可以得到更好的主意。因爲按照我的想法,如果我這樣做,我可能會有重複的數據,因爲前10英里所記錄的記錄也出現在20英里之內。因爲GeoFire不接受半徑範圍。所以當半徑增加時,舊的記錄也被提取,所以沒有使用這種過程。 –

+1

不會重複數據,因爲您不改變查詢,您只需更改半徑。 GeoFire已經可以處理這個問題,所以不用擔心。我正在編輯我的文章幷包含一些代碼片段。當你想在半徑增大,新位置 –

+1

@DhavalDobariya不產生新的查詢,而不是把你的查詢對象和它的半徑設置爲新的值,當從以前的半徑結束(分頁)數據。這將避免數據重複 –

相關問題