Ios 路线未显示在MKMapView中?

Ios 路线未显示在MKMapView中?,ios,swift,routes,mkmapview,Ios,Swift,Routes,Mkmapview,我有这些方法在两个CLLocation之间为MKMapView添加路由。我有有效的收货距离位置和收货距离位置 func addRoutesOverLayForMapView(){ var source:MKMapItem? var destination:MKMapItem? println("\(pickUpDistanceLocation)") println("\(dropOffDistanceLocation)")

我有这些方法在两个
CLLocation
之间为MKMapView添加路由。我有有效的收货距离位置和收货距离位置

 func addRoutesOverLayForMapView(){

        var source:MKMapItem?
        var destination:MKMapItem?
        println("\(pickUpDistanceLocation)")
        println("\(dropOffDistanceLocation)")

        //i also tested with these locations
        //let sourcelocation = CLLocation(latitude:  40.7141667, longitude: -74.0063889)
        //let destinationLocation = CLLocation(latitude: 38.89, longitude: 77.03)

        CLGeocoder().reverseGeocodeLocation(pickUpDistanceLocation, completionHandler: {(placemarks,error)-> Void in

            if (error != nil) {
                println("Reverse geocoder failed with error" + error.localizedDescription)
                return
            }

            if placemarks.count > 0 {
                if let placemark: MKPlacemark = placemarks![0] as? MKPlacemark {

                    source =  MKMapItem(placemark: placemark)
                    println("\(source)")

                }

            } else {
                println("Problem with the data received from geocoder")
            }
        })


        CLGeocoder().reverseGeocodeLocation(dropOffDistanceLocation, completionHandler: {(placemarks,error)-> Void in

            if (error != nil) {
                println("Reverse geocoder failed with error" + error.localizedDescription)
                return
            }

            if placemarks.count > 0 {
                if let placemark: MKPlacemark = placemarks![0] as? MKPlacemark {

                    destination =  MKMapItem(placemark: placemark)
                    println("\(destination)")

                }



            } else {
                println("Problem with the data received from geocoder")
            }
        })

        let request:MKDirectionsRequest = MKDirectionsRequest()
        request.setSource(source)
        request.setDestination(destination)
        request.transportType = MKDirectionsTransportType.Automobile
        request.requestsAlternateRoutes = false

        let directions = MKDirections(request: request)
        directions.calculateDirectionsWithCompletionHandler ({
            (response: MKDirectionsResponse?, error: NSError?) in

            if error == nil {

                self.showRoute(response!)
            }
        })
     }
这是在地图中添加路线覆盖的方法

 func showRoute(response:MKDirectionsResponse){
        for route in response.routes as! [MKRoute]{

            mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)

        }

    }
我得到这个错误,因为响应返回错误:400

打印错误时显示为

可选(“操作无法完成。(nsurErrorDomain 错误-1011。))


实际上,源变量和目标变量都为零。。所以我从服务器得到了错误的响应。如果需要,请尝试下面的代码

func addRoutesOverLayForMapView(){

    var source:MKMapItem?
    var destination:MKMapItem?
    var sourcePlacemark = MKPlacemark(coordinate: pickUpDistanceLocation!.coordinate, addressDictionary: nil)
    source = MKMapItem(placemark: sourcePlacemark)

    var desitnationPlacemark = MKPlacemark(coordinate: dropOffDistanceLocation!.coordinate, addressDictionary: nil)
    destination = MKMapItem(placemark: desitnationPlacemark)
    let request:MKDirectionsRequest = MKDirectionsRequest()
    request.setSource(source)
    request.setDestination(destination)
    request.transportType = MKDirectionsTransportType.Walking

    let directions = MKDirections(request: request)
    directions.calculateDirectionsWithCompletionHandler ({
        (response: MKDirectionsResponse?, error: NSError?) in

        if error == nil {

            self.showRoute(response!)
        }
        else{

        println("trace the error \(error?.localizedDescription)")

        }
    })
 }

func showRoute(response:MKDirectionsResponse){
    for route in response.routes as! [MKRoute]{
        mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
        var routeSeconds = route.expectedTravelTime
        let routeDistance = route.distance
        println("distance between two points is \(routeSeconds) and \(routeDistance)")


    }

}
您应该实现这个委托方法,不要忘记设置mapview委托

  func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {

        if overlay is MKPolyline {
            var polylineRenderer = MKPolylineRenderer(overlay: overlay)
            polylineRenderer.lineDashPattern = [14,10,6,10,4,10]
            polylineRenderer.strokeColor = UIColor(red: 0.012, green: 0.012, blue: 0.012, alpha: 1.00)
            polylineRenderer.lineWidth = 2.5
            return polylineRenderer
        }
        return nil

    }

实际上,源变量和目标变量都为零。。所以我从服务器得到了错误的响应。如果需要,请尝试下面的代码

func addRoutesOverLayForMapView(){

    var source:MKMapItem?
    var destination:MKMapItem?
    var sourcePlacemark = MKPlacemark(coordinate: pickUpDistanceLocation!.coordinate, addressDictionary: nil)
    source = MKMapItem(placemark: sourcePlacemark)

    var desitnationPlacemark = MKPlacemark(coordinate: dropOffDistanceLocation!.coordinate, addressDictionary: nil)
    destination = MKMapItem(placemark: desitnationPlacemark)
    let request:MKDirectionsRequest = MKDirectionsRequest()
    request.setSource(source)
    request.setDestination(destination)
    request.transportType = MKDirectionsTransportType.Walking

    let directions = MKDirections(request: request)
    directions.calculateDirectionsWithCompletionHandler ({
        (response: MKDirectionsResponse?, error: NSError?) in

        if error == nil {

            self.showRoute(response!)
        }
        else{

        println("trace the error \(error?.localizedDescription)")

        }
    })
 }

func showRoute(response:MKDirectionsResponse){
    for route in response.routes as! [MKRoute]{
        mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
        var routeSeconds = route.expectedTravelTime
        let routeDistance = route.distance
        println("distance between two points is \(routeSeconds) and \(routeDistance)")


    }

}
您应该实现这个委托方法,不要忘记设置mapview委托

  func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {

        if overlay is MKPolyline {
            var polylineRenderer = MKPolylineRenderer(overlay: overlay)
            polylineRenderer.lineDashPattern = [14,10,6,10,4,10]
            polylineRenderer.strokeColor = UIColor(red: 0.012, green: 0.012, blue: 0.012, alpha: 1.00)
            polylineRenderer.lineWidth = 2.5
            return polylineRenderer
        }
        return nil

    }
对于Swift 2.1:

func addRoutesOverLayForMapView(){

    var source:MKMapItem?
    var destination:MKMapItem?
    let Scoordinate = CLLocationCoordinate2D(latitude: passLat, longitude: passLong)
    var sourcePlacemark = MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: passLat, longitude: passLong), addressDictionary: nil)
    source = MKMapItem(placemark: sourcePlacemark)

    let DCoordinate = CLLocationCoordinate2D(latitude: lati, longitude: longi)
    var desitnationPlacemark = MKPlacemark(coordinate: DCoordinate, addressDictionary: nil)
    destination = MKMapItem(placemark: desitnationPlacemark)
    let request:MKDirectionsRequest = MKDirectionsRequest()
    request.source = source
    request.destination = destination
    request.transportType = MKDirectionsTransportType.Walking

    let directions = MKDirections(request: request)
    directions.calculateDirectionsWithCompletionHandler ({
        (response: MKDirectionsResponse?, error: NSError?) in

        if error == nil {

            self.showRoute(response!)
        }
        else{

            print("some error")

        }
    })
}

func showRoute(response:MKDirectionsResponse){
    for route in response.routes {
        mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
        let routeSeconds = route.expectedTravelTime
        let routeDistance = route.distance
        print("distance between two points is \(routeSeconds) and \(routeDistance)")


    }

}


func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {

     let polylineRenderer = MKPolylineRenderer(overlay: overlay)

    if overlay is MKPolyline {
        polylineRenderer.lineDashPattern = [14,10,6,10,4,10]
        polylineRenderer.strokeColor = UIColor(red: 0.012, green: 0.012, blue: 0.012, alpha: 1.00)
        polylineRenderer.lineWidth = 2.5
        return polylineRenderer
    }
    return polylineRenderer

}
对于Swift 2.1:

func addRoutesOverLayForMapView(){

    var source:MKMapItem?
    var destination:MKMapItem?
    let Scoordinate = CLLocationCoordinate2D(latitude: passLat, longitude: passLong)
    var sourcePlacemark = MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: passLat, longitude: passLong), addressDictionary: nil)
    source = MKMapItem(placemark: sourcePlacemark)

    let DCoordinate = CLLocationCoordinate2D(latitude: lati, longitude: longi)
    var desitnationPlacemark = MKPlacemark(coordinate: DCoordinate, addressDictionary: nil)
    destination = MKMapItem(placemark: desitnationPlacemark)
    let request:MKDirectionsRequest = MKDirectionsRequest()
    request.source = source
    request.destination = destination
    request.transportType = MKDirectionsTransportType.Walking

    let directions = MKDirections(request: request)
    directions.calculateDirectionsWithCompletionHandler ({
        (response: MKDirectionsResponse?, error: NSError?) in

        if error == nil {

            self.showRoute(response!)
        }
        else{

            print("some error")

        }
    })
}

func showRoute(response:MKDirectionsResponse){
    for route in response.routes {
        mapView.addOverlay(route.polyline, level: MKOverlayLevel.AboveRoads)
        let routeSeconds = route.expectedTravelTime
        let routeDistance = route.distance
        print("distance between two points is \(routeSeconds) and \(routeDistance)")


    }

}


func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {

     let polylineRenderer = MKPolylineRenderer(overlay: overlay)

    if overlay is MKPolyline {
        polylineRenderer.lineDashPattern = [14,10,6,10,4,10]
        polylineRenderer.strokeColor = UIColor(red: 0.012, green: 0.012, blue: 0.012, alpha: 1.00)
        polylineRenderer.lineWidth = 2.5
        return polylineRenderer
    }
    return polylineRenderer

}

据OSStatus称,这似乎是一个服务器错误:那么我该怎么办?我尝试过使用不同的lat和LONGIT。如果错误是服务器端的,在苹果解决之前,你无能为力。据OSStatus称,这似乎是一个服务器错误:那么我该怎么办?我试过使用不同的lat和longIf错误是服务器端的,在苹果解决之前,你没什么办法。