我已經使用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可以分頁嗎?或者我必須使用一些不同的機制,任何人都可以請這方面的建議嗎?
我所知分頁是默認不支持GeoFire,所以你將不得不使用自己的機制。一種解決方案是在第一次呼叫時使用小半徑,並在每次下一次呼叫時增加它。我沒有看到任何其他乾淨的解決方案。我們也想在我們的項目中使用GeoFire,但由於我們的需求非常緩慢,並且使用了太多的調用,所以我們最終編寫了自己的API。 – ZassX