2016-09-27 70 views
1

我试图使用GeoFire将坐标存储到Firebase数据库。GeoFire Swift 3 - 保存和更新坐标

我不确定如何更新新坐标,因为它们每秒都会更改/更新。使用childByAutoId,它将为每辆Bike生成一个新的唯一ID。

我该如何参考这个独特的Bike ID?例如,用户将被FIRAuth.auth()?.currentUser?.uid调用。这可能吗?

let geofireRef = FIRDatabase.database().reference().child("Bike").childByAutoId() 
let geoFire = GeoFire(firebaseRef: geofireRef) 

var data = geoFire?.setLocation(CLLocation(latitude: userIncrementLat, longitude: userIncrementLong), forKey: "BikeId") 

我的火力地堡数据库结构的样子......

Root 
1. Bike 
2. UniqueUID Number (Firebase) 
3. BikeId 
4. g 
     l 
5.  0: 
     1: 
+0

又怎么会被检索的值?我只是努力去理解我将如何称此独特的ID。 –

回答

6

这是我的火力地堡DB结构更新用户位置的时间和retrive附近的用户在地图上显示:

db-root 
"users" : { 
    <userUID> : { 
     "someKey" : "someValue", 
     ... 
    } 
} 
"users_location" : { 
    <userUID> : { 
     <geofireData> ... 
    } 
} 

瓦尔使用:

let ref = FIRDatabase.database().reference() 
let geoFire = GeoFire(firebaseRef: ref.child("users_location")) 

要更新登录的用户的位置:

func updateUserLocation() { 

    if let myLocation = myLocation { 

     let userID = FIRAuth.auth()!.currentUser!.uid 
     geoFire!.setLocation(myLocation, forKey: userID) { (error) in 
      if (error != nil) { 
       debugPrint("An error occured: \(error)") 
      } else { 
       print("Saved location successfully!") 
      } 
     } 

    } 
} 

以寻找附近的用户我用的是findNearbyUsers功能。找到附近的用户并将nearbyUsers数组保存到用户的UID密钥中很有用。在查询完成后执行observeReady函数,并使用UID检索用户详细信息(我用它在地图上显示用户详细信息)。

func findNearbyUsers() { 

    if let myLocation = myLocation { 

     let theGeoFire = GeoFire(firebaseRef: ref.child("users_location")) 
     let circleQuery = theGeoFire!.query(at: myLocation, withRadius: radiusInMeters/1000) 

     _ = circleQuery!.observe(.keyEntered, with: { (key, location) in 

      if !self.nearbyUsers.contains(key!) && key! != FIRAuth.auth()!.currentUser!.uid { 
       self.nearbyUsers.append(key!) 
      } 

     }) 

     //Execute this code once GeoFire completes the query! 
     circleQuery?.observeReady({ 

      for user in self.nearbyUsers { 

       self.ref.child("users/\(user)").observe(.value, with: { snapshot in 
        let value = snapshot.value as? NSDictionary 
        print(value) 
       }) 
      } 

     }) 

    } 

} 

希望它可以帮助

+0

嗨,如果我想显示用户而不是用户的详细信息?谢谢 – John