2015-06-11 8 views
0

У меня есть этот метод, который добавляет маршруты для MKMapView между двумя CLLocation. У меня есть и действительные pickUpDistanceLocation & dropOffDistanceLocationМаршрут не отображается в 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) 

     } 

    } 

I get this error as the response returned error: 400

На печати ошибку он показывает, как

Optional("The operation couldn’t be completed. (NSURLErrorDomain error -1011.)")

+0

Согласно OSStatus, это выглядит как ошибка сервера: http://www.osstatus.com/search/results?platform=all&framework=all&search=-1011 – CaptainRedmuff

+0

что мне делать? Я пробовал использовать разные латы и длинные –

+0

Если ошибка на стороне сервера, вы не можете сделать это, пока Apple не решит ее. – CaptainRedmuff

ответ

4

На самом деле как исходные, так и целевые переменные были нулевыми. Так что я получил плохую реакцию от server.If вам нужно просто попробовать следующий код

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 

    } 
2

Для 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 

} 
Смежные вопросы