2016-09-27 85 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