Сигическая проблема при расчете маршрута - PullRequest
0 голосов
/ 11 ноября 2018

У меня проблема при попытке добавить маршрут в моем автономном режиме карты Sygic . В отладчике я получил это сообщение «Интерфейс маршрутизации: запрос неизвестного транспортного режима». это код, который я написал:

   class SygicMapViewController: UIViewController, SYNavigationDelegate,SYRoutingDelegate,SYMapViewDelegate,CLLocationManagerDelegate{
    let mapView = SYMapView()
    let routing = SYRouting()
    var  locationManager = CLLocationManager()
    override func viewDidLoad() {
        super.viewDidLoad()
        mapView.delegate = self
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
        locationManager.requestAlwaysAuthorization()
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
    }
    func setupMapView(){
        let tiltFor2D: SYAngle = 0
        mapView.tilt = tiltFor2D
        mapView.zoom = 12
        mapView.rotation = 180
        mapView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height:self.view.frame.size.height+20)
        self.view.addSubview(mapView)
        mapView.renderEnabled = true
    }
    func addMarkers(){

    }
    func mapView(_ mapView: SYMapView, didFinishInitialization success: Bool) {
        setupMapView()
        SYNavigation.shared().delegate = self
        routing.delegate = self
        let startPoint = SYGeoCoordinate(latitude: 37.270665, longitude:  9.873921)
        let endPoint = SYGeoCoordinate(latitude: 37.242681, longitude: 9.911932)
        computeRoute(from: startPoint!, to: endPoint!)
    }
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print(error)
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func computeRoute(from fromCoordinate: SYGeoCoordinate, to toCoordinate:
        SYGeoCoordinate) {
        let startWaypoint = SYWaypoint(position: fromCoordinate, type: .start, name: "Begin")
        let endWaypoint = SYWaypoint(position: toCoordinate, type: .end, name: "End")
        let routingOptions = SYRoutingOptions()
        routingOptions.transportMode = .unknown// For other options see SYTransportMode
        routingOptions.routingType = .economic// For other options see SYRoutingType
        routing.computeRoute(startWaypoint, to: endWaypoint, via: nil, with: routingOptions)
    }

    func routing(_ routing: SYRouting, computingFailedWithError error: SYRoutingError) {
        print(error)
    }

    func routing(_ routing: SYRouting, didComputePrimaryRoute route: SYRoute?) {
        SYNavigation.shared().start(with: route)
        // You might want to put it also on the map
        let mapRoute = SYMapRoute(route: route!, type: .primary)
        mapView.add(mapRoute)
        mapView.cameraMovementMode = .followGpsPosition
    }
}

Я исправил проблему, выбрав локальную переменную маршрутизации в методе computeRoute, и я внес некоторые изменения, чтобы запустить метод computeRoute после инициализации mapview

1 Ответ

0 голосов
/ 12 ноября 2018

Я на самом деле вижу две проблемы с вашим кодом.

  1. В func computeRoute(from fromCoordinate: SYGeoCoordinate, to toCoordinate: SYGeoCoordinate) вы определяете локальную переменную routing который скрывает переменную экземпляра. Это приводит к тому, что маршрутизация освободить, прежде чем он сможет вычислить любой маршрут. Так что просто удали это let routing = SYRouting() из этого метода и экземпляра использования routing переменная.
  2. Другой также может быть проблемой и вызывать проблемы. Ты начинаешь маршрутизация в viewDidLoad до инициализации карты. Тогда если маршрутизация быстрее, вы будете добавлять SYRoute объект на карту и это, вероятно, потерпит крах. Я знаю, что это просто какая-то быстрая настройка, но чтобы избежать каких-либо проблем, переместите этот вызов на номер computeRoute mapView(_, didFinishInitialization) метод.
...