路线不显示在MKMapView?

我有这两个CLLocation之间添加MKMapView的路线的方法。 我有有效的pickUpDistanceLocation&dropOffDistanceLocation

  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

在打印错误它显示为

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

实际上源和目标variables都是零。所以我得到了服务器的不良反应。如果你只需要尝试下面的代码

 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 }