7

iOS 用の Geofire を試してみましたが、サークル クエリで検索位置からの距離を返す方法が見つからないようです。GFQueryResultBlock はキーと位置のみを返します。自分で距離を計算しなければならないと仮定するのは正しいですか?

Firebase を使用して近くのレストラン アプリを作成していて、ユーザーに最も近い 20 のレストランを表示したいとしましょう。サークル クエリを作成し、20 軒のレストランが見つかるまでループを介して検索範囲を広げることができます。次に、それぞれの距離を計算し、ユーザーに表示する前に並べ替えます。データを構造化する (距離の計算と並べ替え) ためにアプリで大量の作業が行われていることを考えると、これは合理的なアプローチですか?

javascript Geofire クエリが中心からの距離を返すことに気付きましたが、iOS と Android のバージョンはこれとは異なると思います。

4

1 に答える 1

5

Geofire からクエリを実行すると、関連する結果が自動的に昇順で並べられます。したがって、距離を取得するために、distanceFromLocation 関数を使用するだけです: ここに私のコード:

func getGeoFirePlaces(){

    let geofireRef = FIRDatabase.database().reference().child("testForGeofire")
    let geoFire  = GeoFire(firebaseRef: geofireRef)
    //geoFireRef is pointing to a firebase reference where I previously set all  places' location 
    let userPosition = CLLocation(latitude: 32.0776067, longitude: 34.78912)
    let circleQuery = geoFire.queryAtLocation(userPosition, withRadius: 2)

    circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in
        print("Key '\(key)' entered the search area and is at location '\(location)'")

        //getting distance of each Place return with the callBack
        let distanceFromUser = userPosition.distanceFromLocation(location)
        print(distanceFromUser)
    })

}

この助けを願っています!

于 2016-12-06T14:58:06.670 に答える