从当前位置到注释的距离。 (火力地堡)

时间:2017-09-15 12:40:50

标签: swift firebase firebase-realtime-database cllocationdistance

我希望从我的Currentlocation到FireData Base中的注释有一段距离。我试着说出来,但我不能;(。我希望在var中两个位置之间的距离。我希望你们能帮助我。

func reload(){
    //get data
    Database.database().reference().child("Rollerbanken").observe(.value, with: { (snapshot) in



        for item in snapshot.children{

            if let value = snapshot.value as? Dictionary<String, Any> {

                for key in value.keys {
                    if let itemDict = value[key] as? Dictionary<String, AnyObject> {

                        let annotation = MKPointAnnotation()
                        annotation.title = itemDict["TypeControle"] as! String
                        let tijd = itemDict["Tijd"] as! String
                        annotation.subtitle = "Geplaatst om \(tijd)"

                        let getLatitude = itemDict["Latitude"] as? String
                        let getLongitude = itemDict["Longitude"] as? String
                        if let lat = getLatitude, let long = getLongitude {
                            annotation.coordinate = CLLocationCoordinate2D(latitude: Double(lat)!, longitude: Double(long)!)

                            self.map.addAnnotation(annotation)

                            let directionRequest = MKDirectionsRequest()
                            directionRequest.source = MKMapItem.forCurrentLocation()
                            if #available(iOS 10.0, *) {
                                directionRequest.destination = MKMapItem(placemark: MKPlacemark.init(coordinate: CLLocationCoordinate2DMake(Double(lat)!, Double(long)!)))
                            } else {
                                // Fallback on earlier versions
                            }
                            directionRequest.transportType = .walking
                            let direction = MKDirections(request: directionRequest)
                            direction.calculate(completionHandler: { (response, error) in
                                if error != nil {
                                    print("Error while build route")
                                } else {
                                    let route = response?.routes.last
                                    let distance = route?.distance
                                    print(distance)
                                }
                            })
                        }
                    }
                }
            }
        }
    })
}

这是我的结构: Structure

2 个答案:

答案 0 :(得分:0)

尝试使用此代码。别忘了在地图上启用您当前的位置

let directionRequest = MKDirectionsRequest()
        directionRequest.source = MKMapItem.forCurrentLocation()
        directionRequest.destination = MKMapItem(placemark: MKPlacemark.init(coordinate: CLLocationCoordinate2DMake(YOURPOINTLATITUDE, YOURPOINTLONGITUDE)))
        directionRequest.transportType = .walking
        let direction = MKDirections(request: directionRequest)
        direction.calculate(completionHandler: { (response, error) in
            if error != nil {
                print("Error while build route")
            } else {
                let route = response?.routes.last
                let distance = route?.distance

答案 1 :(得分:0)

我使用了类似的功能,注意这是我的功能因此它有骑手和驱动程序..但是你可以改变它来使用firebase中的注释和位置。

if let rideRequestDictionary = snapshot.value as? [String:AnyObject] {

            // Getting the rider location and email
            if let email = rideRequestDictionary["email"] as? String {
                if let lat = rideRequestDictionary["lat"] as? Double{
                    if let lon = rideRequestDictionary["lon"] as? Double{

                        // Getting the Driver location and email
                        let driverCLLocation = CLLocation(latitude: driverLocation.latitude, longitude: driverLocation.longitude)
                        let riderCLLocation = CLLocation(latitude: lat, longitude: lon)

                        // getting the distance between the two people
                        let distance = driverCLLocation.distance(from: riderCLLocation) / 1000

                        // rounding the distances 
                        let roundedDistance = round(distance * 100) / 100

                        // putting the rounded distance and email in label
                        cell.textLabel?.text = "\(email) - \(roundedDistance)km away"
                    }
                }

            }