1

我想找到离我最近的用户。(例如长达 5 公里)我在 firebase 数据库中的节点如下结构,

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

有没有办法在那个范围内获得准确的用户。否则我应该使用CLLocation distance方法检查他们最近位置的每个用户或不给我。

4

1 回答 1

7

我强烈推荐使用Geofire 来做这样的事情。

要进行设置,您的数据结构将略有变化。您仍然可以将 lat/lng 存储在您的用户身上,但您还将创建一个新的 Firebase 表,名为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,您可以使用 aGFQuery来查询特定范围内的所有用户。

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)'")
})
于 2017-02-07T14:20:48.713 回答