从Firebase获取坐标以进行注释

时间:2017-11-09 03:44:52

标签: swift firebase annotations mapkit core-location

我目前正在尝试从firebase获取数据并在我的MKMapKitView中创建注释。我相信我正在正确地检索数据但没有正确地创建注释。

我认为因为有多个用户我不能将其设置为常规的注释方式。

   let   userLocation = CLLocationCoordinate2D(latitude: Double(userLatitude!), longitude: Double(userLongitude!))

                let userAnnotation = MKPointAnnotation();
        userAnnotation.coordinate = self.userLocation!;
                //userAnnotation.title = "Riders Location";
                map.addAnnotation(userAnnotation);

        }

我还将添加如何检索用户。

func retrieveUsers(){
        let ref = Database.database().reference()
        ref.child("users").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in
            let users = snapshot.value as! [String: AnyObject]
            self.user.removeAll()
            for (_,value) in users {
                if let uid = value["uid"] as? String {
                    if uid != Auth.auth().currentUser!.uid {
                        let userToShow = User()
                        if let fullName = value["full name"] as? String,
                            let userLongitude = value["long"] as? Double,
                            let userLatitude = value["lat"] as? Double


                        {
                            userToShow.fullName = value["full name"] as? String
                            userToShow.imagePath = value["urlToImage"] as? String
                            userToShow.userID = value["uid"] as? String
                            userToShow.userLongitude = value["long"] as? String
                            userToShow.userLatitude = value["lat"] as? String

                            self.user.append(userToShow)
                        }


                    }

                }
            }
            DispatchQueue.main.async {
                self.map.reloadInputViews()

                //not sure if this is right
            }
        })

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一种预感,但我认为你正在追求这样的功能 - 你非常接近你的努力!注意 - 快速语法中没有分号。

private func addUserAnnotation(user: User) {        

    let userAnnotation = MKPointAnnotation()
    let userLocation = CLLocationCoordinate2D(latitude: Double(user.userLatitude!), 
longitude: Double(user.userLongitude!))

    userAnnotation.coordinate = userLocation
    //userAnnotation.title = "Riders Location"
    self.map.addAnnotation(userAnnotation)

}

像这样调用这个函数 - 让我们说你想为你的用户数组中的第一个用户添加注释:

addUserAnnotation(user: user[0]) //addUserAnnotation(user[0]) also acceptable

这是用户的OP类。我认为这也很重要

class User: NSObject {

    var userID: String!
    var fullName: String!
    var imagePath: String!
    var userLongitude: Double! // change from String!
    var userLatitude: Double!  // change from String!

}