GeoFire不显示输入的区域快速

时间:2018-11-06 03:50:44

标签: swift firebase firebase-realtime-database geofire

我已经尝试了很多周才能使其正常工作。我已经阅读了很多次文档,并且似乎没有在线示例。

目标: 我要做的就是将当前用户所在位置10公里半径内的所有帖子打印到控制台。

问题:我真的不明白需要在geoFire.setLocation用户位置或发布位置中放置哪些参数。该文档仅显示手动输入的坐标。我想从firebase中获取我的信息,并查询用户何时在10公里之内将其打印到控制台。目前,使用该代码我什么都没被打印出来。

fileprivate func setupGeoFireLocation() {

    let ref = Database.database().reference(withPath: "posts")
    ref.observe(.childAdded, with: { (snapshot) in

        guard let dictionary = snapshot.value as? [String: Any] else { return }

        guard let latitude = dictionary["latitude"] as? String else { return }
        guard let longitude = dictionary["longitude"] as? String else { return }

        let postLat = (latitude as! NSString).doubleValue
        let postLon = (longitude as! NSString).doubleValue


        self.geoFire.setLocation(CLLocation(latitude: postLat, longitude: postLat), forKey: "posts")
        //Not quite sure what's meant to be the "forKey:" parameter.

})
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let userLocation: CLLocation = locations[0] as CLLocation

    ref = Database.database().reference()
    geoFire = GeoFire(firebaseRef: ref)

    let center = CLLocation(latitude: userLocation.coordinate.latitude, longitude: userLocation.coordinate.longitude)
     let circleQuery = geoFire.query(at: center, withRadius: 10.0)
    _ = circleQuery.observe(.keyEntered, with: { (key, location) in
        print(key)
    })

    circleQuery.observeReady{
        print("All initial data has been loaded and events have been fired for circle query!")
    }
}

Firebase Database

1 个答案:

答案 0 :(得分:0)

从您的评论看来,您似乎从未通过GeoFire的setLocation方法专门设置位置信息。为了使GeoQueries正常工作,您实际上还需要在GeoFire中设置位置。不能简单地从您现有的lat和lon值工作。

GeoFire查询一个单独的位置,它将密钥与位置信息的geohash关联。请遵循setting a location for a keyretrieving a locationquerying上的GeoFire文档。

我还建议您阅读这些问题,以进一步说明GeoFire及其工作原理: