2016-09-27 2 views
1

Я пытаюсь сохранить координаты в базе данных Firebase с помощью GeoFire.GeoFire Swift 3 - Координаты сохранения и обновления

Я не уверен, как обновлять новые координаты, поскольку они будут меняться/обновляться каждую секунду. С childByAutoId он генерирует новый уникальный идентификатор для каждого байка.

Как я могу ссылаться на этот уникальный идентификатор велосипеда? Например, пользователь будет вызываться 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") 

Моя Firebase структура базы данных будет выглядеть ...

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

Кроме того, как бы значения будут получено? Я просто пытаюсь понять, как я назвал бы этот уникальный идентификатор. –

ответ

6

Это моя структура Firebase 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")) 

Чтобы обновить LOGGED местоположение пользователя:

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

Смежные вопросы