我想找到离我最近的用户。(例如,最长5公里)我的节点在Firebase数据库中,如下所示,
+ users + user_id0 - latitude: _ - longitude: _
有什么办法可以让这个半径范围内的确切用户。否则,我应该使用CLLocation distance方法检查每个用户的最近位置或不向我显示。
CLLocation distance
我强烈建议您使用Geofire这样的工具。
要进行设置,您的数据结构将略有变化。您仍然可以将lat / lng存储在用户上,但是您还将创建一个名为以下内容的新Firebase表users_locations
users_locations
您的users_locations表格将通过Geofire填充,看起来像这样
users_locations user_id0: g: 5pf666y l: 0: 40.00000 1: -74.00000
通常,这是在Geofire中存储位置的方式,但是您可以将其设置为在创建/更新用户对象时保存。
let geofireRef = FIRDatabase.database().reference().child("users_locations") let geoFire = GeoFire(firebaseRef: geofireRef) geoFire.setLocation(CLLocation(latitude: lat, longitude: lng), forKey: "user_id0")
在中保存位置后users_locations,您可以使用GFQuery来查询特定范围内的所有用户。
GFQuery
let center = CLLocation(latitude: yourLat, longitude: yourLong) var circleQuery = geoFire.queryAtLocation(center, withRadius: 5) var queryHandle = circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in println("Key '\(key)' entered the search area and is at location '\(location)'") })