如何将附近位置设置为从Firebase检索到的TableView

时间:2017-08-09 02:16:34

标签: swift dictionary firebase firebase-realtime-database latitude-longitude

我是Swift 3的新手,我有一个问题是关于确定坐标是否在附近,相对于用户位置。之后,我想将附近的位置显示在TableView中。

这是我的Firebase结构:

enter image description here

我的班级看起来像这样:

class UITableViewControllerForShop: UIViewController, UITableViewDelegate, UITableViewDataSource, CLLocationManagerDelegate

这些变量是全局的:

let databaseRef = FIRDatabase.database().reference().child("Butikker")
var retrieveData = [String:AnyObject]()
var distanceInMeters: CLLocationDistance!

在我的viewDidLoad函数中执行:

override func viewDidLoad() {
        super.viewDidLoad()

        databaseRef.observeSingleEvent(of: .value, with: { (snapshot) in
            for child in snapshot.children {
                let snap = child as! FIRDataSnapshot
                let dictionary = snap.value as! [String: AnyObject]

                self.retrieveData = ["latitude": dictionary["Latitude"] as! Double as AnyObject, "longtitude": dictionary["Longtitude"] as! Double as AnyObject]
            }
        })
}

要检查用户位置并将其与Firebase位置进行比较,请执行以下操作:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let location = locations[0]

    print(location.coordinate.latitude, location.coordinate.longitude)

    //My location
    let myCoordinate = CLLocation(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)

    if self.retrieveData.isEmpty == false {
        let shopCoordinate = CLLocation(latitude: retrieveData["latitude"]! as! CLLocationDegrees, longitude: retrieveData["longtitude"]! as! CLLocationDegrees)
        print(shopCoordinate.coordinate.latitude, shopCoordinate.coordinate.longitude)
        distanceInMeters = myCoordinate.distance(from: shopCoordinate)
        print(distanceInMeters)
    }
    //Distance
}

我像这样初始化我的tableview:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell:UITableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as UITableViewCell!

    if distanceInMeters > 5000 {
        cell.textLabel?.text = retrieveData["latitude"] as! String
    }
    return cell
}

这些是我遇到的问题:

  1. 我无法弄清楚如何检查我的距离>在locationManager函数中初始化后5000。
  2. 我的词典retrieveData不会为每个键存储超过1个值,如果我想在表格视图中显示附近项目列表,则会导致问题。
  3. 需要花费一些时间来完成for循环,这会让一切变得更加困难。
  4. 我希望得到答案的问题:

    1.在locationManager函数中初始化后如何使用distanceInMeters?

    2.如何确定附近是否有东西并放入我的TableView?

1 个答案:

答案 0 :(得分:0)

如果你想达到这个目的,我建议你使用一个完全符合你需要的库:https://github.com/firebase/geofire-objc

我想你可以自己写这个但是需要花费很多时间,因为Firebase不会帮助你处理与GeoLocation相关的任何功能(如果你把它与Parse服务(死)比较,已经包含了功能按距离查询位置。)