7

我一直在尝试使用iOS 版 Geofire,但似乎找不到任何方法可以在圆形查询中返回与搜索位置的距离。GFQueryResultBlock 只返回键和位置。我是否正确假设我必须自己计算距离?

假设我正在使用 Firebase 制作一个附近的餐厅应用程序,并且想要显示离用户最近的 20 家餐厅,按它们的距离排序。我可以创建一个圆形查询,然后通过循环增加搜索半径,直到找到 20 家餐厅。然后计算每个距离并在将它们显示给用户之前对其进行排序。这是一种合理的方法吗,考虑到应用程序中正在进行大量工作来构建数据(计算距离和排序)?

我注意到 javascript Geofire 查询返回距离 center,但我猜 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 回答