2016-05-25 2 views
1

Я создаю простое приложение с маршрутами, используя SDK Mapbox iOS и пытаясь выяснить, как рисовать полилинию без geojson. Прежде всего, я пытался получить маршрут с помощью этого метода:Draw polyline MapBox, iOS

func getRoute(directionsRequest: MBDirectionsRequest){ 

    let directionsRequest = MBDirectionsRequest(sourceCoordinate: pointOne.coordinate, destinationCoordinate: pointTwo.coordinate) 
    directionsRequest.transportType = .Automobile 

    let directions = MBDirections(request: directionsRequest, accessToken: "pk.eyJ1IjoidXJiaWNhIiwiYSI6ImNpb2xkNndvMjAwMW13cW1ibmY4Z2t3NHcifQ.3wadKQBcytWcJVY1eUSVWQ") 


    directions.calculateDirectionsWithCompletionHandler({ (response: MBDirectionsResponse?, error: NSError?) -> Void in 

     if error != nil { 
      print(error) 
     } else { 
      self.myRoute = response?.routes.last 
      print(self.myRoute?.destination.coordinate) 
      self.drawRoute(self.myRoute!) 
     } 

    }) 
} 

И после этого попытался нарисовать маршрут, но он не работает.

func drawRoute(myRoute: MBRoute){ 
    let waypoints = myRoute.waypoints 

    var coordinates: [CLLocationCoordinate2D] = [] 

    for point in waypoints { 

     let coordinate = CLLocationCoordinate2DMake(point.coordinate.latitude, point.coordinate.longitude) 
     coordinates.append(coordinate) 
    } 

    let line = MGLPolyline(coordinates: &coordinates, count: UInt(coordinates.count)) 

    dispatch_async(dispatch_get_main_queue(), { 
     [unowned self] in 
     self.mapView.addAnnotation(line) 
     print(line) 
    }) 
} 
+0

Проблема решена, вы можете найти правильный способ рисования ломаной линии в конце вопрос, после *** РЕШЕНИЕ *** –

+1

Не добавляйте решение к вашему вопросу. Если вы нашли решение, отправьте его в качестве ответа. – Moritz

+1

ОК, спасибо, я переведу его в поле ответа –

ответ

2

В этой ситуации вы не должны разделить код на два метода и результат должен выглядеть следующим образом

directions.calculateDirectionsWithCompletionHandler({ 

     (response, error) in 

     if let routeOne = response?.routes.first { 

      let steps = routeOne.legs.first!.steps 

      for step in steps { 
       self.myTourArray.append(step) 
       self.myTourArrayPoints.append(step.maneuverLocation) 
      } 

      self.myTourline = MGLPolyline(coordinates: &self.myTourArrayPoints, count: UInt(self.myTourArray.count)) 
      self.mapView.addAnnotation(self.myTourline) 
     } 
    }) 
}