FireFoxデータベースから位置情報を取得するためにGeoFireを使用しました。クエリで半径を小さくしてデータをすばやく読み込むことができますが、私の要件は場所に基づいてデータを短くすることです。最も近いレコードが最初に表示されるなどです。だから私はすべてのデータが必要なので、地球の半径を合計したGeoFireクエリで現在の場所を渡しました。しかし、私はGeoFireでページネーションを適用する方法がないので、Firebaseデータベースでより多くのレコードを利用できるようになると、現在の実装では確実にロードに時間がかかります。GeoFireクエリでページネーションを適用して読み込み時間を短縮する
以下は、場所ベースのレコードを取得するために使用したコードです。
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ではデフォルトではサポートされていないので、独自のメカニズムを使用する必要があります。 1つの解決方法は、最初の呼び出しで小さい半径を使用し、次の呼び出しごとに小さくすることです。私は他の清潔な解決策を見ません。私たちはプロジェクトでもGeoFireを使いたいと思っていましたが、私たちのニーズは非常に遅く、呼び出し回数が多すぎるため、独自のAPIを作成しました。 – ZassX