HERE Maps SDK iOS Swift 4 пошаговая навигация запускается слишком долго

На SO имеется скудная документация и ресурсы по HERE Maps Mobile-SDK, поэтому я надеюсь, что кто-нибудь сможет нам помочь.

Мы разработали пошаговую навигацию в нашем приложении (iOS SDK Swift4 XCode9). Все работает отлично, голоса загружаются правильно, маршрут рассчитывается правильно, позиционирование запускается правильно, а затем мы вызываем метод:

private func calculateRoute() {
        print("Calculating route")
        // Routing mode
        let routingMode = NMARoutingMode.init(routingType: NMARoutingType.fastest, transportMode: NMATransportMode.car, routingOptions: NMARoutingOption.avoidBoatFerry)
        routeManager.calculateRoute(withStops: [initialCoordinate, destinationCoordinate], routingMode: routingMode) {
            (routeResult: NMARouteResult?, error: NMARoutingError?) in
            if error == nil || error == NMARoutingError.none {
                let mapRoute = routeResult?.routes?.first
                self.route = NMAMapRoute.init(mapRoute!)
                self.gpsMapView.add(mapObject: self.route!)
                self.startNavigation(mapRoute: self.route!)
            } else {
                os_log("Route calculation completed with errors", log: OSLog.default, type: .debug)
                print(error.debugDescription)
            }
        }
    }

private func startNavigation(mapRoute: NMAMapRoute) {
    // Start the turn-by-turn navigation
    navigationManager.startTurnByTurnNavigation(mapRoute.route)
}

Как только вызывается начальный метод пошаговой навигации внутри navigationManager, в конечном итоге вызывается этот обратный вызов:

func navigationManager(_ navigationManager: NMANavigationManager, didUpdateManeuvers currentManeuver: NMAManeuver?, _ nextManeuver: NMAManeuver?) {
        nextRoadName.text = nextManeuver?.roadName as String?
        displayManeuverImage(icon: currentManeuver?.icon)
}

После выполнения этого обратного вызова навигация работает отлично.

Наша проблема в том, что время между звонками на:

navigationManager.startTurnByTurnNavigation(mapRoute.route)

И обратный вызов случайным образом длинный. Иногда это 1 секунда (почти никогда), а во многих случаях - до 2 минут, что неприемлемо для производственного приложения.

Ни один из наших кодов не выполняется в течение этого времени ожидания, поэтому это должно быть что-то внутреннее для ЗДЕСЬ Maps-SDK или какие-то внутренние проблемы, о которых я не знаю.

Кто-нибудь знает, что здесь происходит?

Заранее спасибо!


person Sipox    schedule 22.02.2018    source источник


Ответы (1)


Это происходит потому, что следующий маневр отправляется только тогда, когда пользователь начинает движение. Когда пользователь неподвижен, двигатель не может определить направление и точность положения. Как только будет обнаружено достаточное движение, будут произведены маневры.

Вы должны показать начальный маневр двигателя после расчета маршрута. Может быть, если пользователь не двигается, вы можете показать тост из старого маневра, чтобы подтолкнуть пользователя к движению.

person David Leong    schedule 28.02.2018
comment
Спасибо, Дэвид, действительно проблема. Дело не в решении этой проблемы, а в том, чтобы представить информацию пользователю таким образом, чтобы он знал, что он должен выйти и начать движение. Меня беспокоило то, что люди пробуют приложение дома, и я не хотел создавать плохой опыт. Спасибо за ваш ответ :) - person Sipox; 01.03.2018