【问题标题】:GeoFire Swift 3 - Saving and Updating CoordinatesGeoFire Swift 3 - 保存和更新坐标
【发布时间】:2017-02-05 05:00:02
【问题描述】:

我正在尝试使用 GeoFire 将坐标存储到 Firebase 数据库中。

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

如何引用这个唯一的自行车 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")

我的 Firebase 数据库结构看起来像...

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

【问题讨论】:

  • 另外如何检索这些值?我只是在努力理解如何称呼这个唯一 ID。

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


【解决方案1】:

这是我的 Firebase 数据库结构,用于按时间更新用户位置并检索附近用户以显示在地图上:

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 函数。查找附近的用户并将用户的 UID 键保存到 nearbyUsers 数组中很有用。 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)
                })
            }

        })

    }

}

希望对你有帮助

【讨论】:

  • 嗨,如果我想显示用户而不是用户详细信息怎么办?谢谢
猜你喜欢
  • 2017-05-14
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
相关资源
最近更新 更多