如何使用Swift查询Firebase中最近的用户?

时间:2017-02-07 14:10:06

标签: ios swift firebase firebase-realtime-database cllocationdistance

我想找到离我所在位置最近的用户。 (例如,最多5km)我的firebase数据库中的节点如下面的结构,

+ users
  + user_id0
    - latitude: _
    - longitude: _

是否有任何方法可以获得该半径内的确切用户。否则,我应该使用CLLocation distance方法检查每个最近位置的用户。

1 个答案:

答案 0 :(得分:6)

我强烈建议您使用Geofire这样的内容。

要进行设置,您的数据结构会略有变化。您仍然可以在用户上存储lat / lng,但您还会创建一个名为users_locations

的新Firebase表格

您的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查询特定范围内的所有用户。

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)'")
})