我已经尝试了很多周才能使其正常工作。我已经阅读了很多次文档,并且似乎没有在线示例。
目标: 我要做的就是将当前用户所在位置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!")
}
}
答案 0 :(得分:0)
从您的评论看来,您似乎从未通过GeoFire的setLocation
方法专门设置位置信息。为了使GeoQueries正常工作,您实际上还需要在GeoFire中设置位置。不能简单地从您现有的lat和lon值工作。
GeoFire查询一个单独的位置,它将密钥与位置信息的geohash关联。请遵循setting a location for a key,retrieving a location和querying上的GeoFire文档。
我还建议您阅读这些问题,以进一步说明GeoFire及其工作原理: