即使用户设备位置在同一条路线上,导航也会在每条路线前进后不断不断地重新路由。我认为Mapbox仅在用户离开当前路线时才自动处理重新路由。阅读文档的this部分之后,我认为我需要手动处理它。
基于文档,我使用下面的代码手动处理重新路由,但是不建议使用该代码。
func navigationViewController(_ navigationViewController: NavigationViewController, shouldRerouteFrom location: CLLocation) -> Bool {
return navigationViewController.routeController.userIsOnRoute(location)
}
因此崩溃将我重定向到Mapbox SDK的这一部分
@available(*, deprecated, renamed: "navigationService", message: "NavigationViewController no longer directly manages a RouteController. See MapboxNavigationService, which contains a protocol-bound reference to the RouteController, for more information.")
/// :nodoc: obsoleted
@objc public final var routeController: RouteController! {
get {
fatalError()
}
set {
fatalError()
}
}
但是navigationService
不包含userIsOnRoute
功能。我是否可以使用其他功能,或者这是一个错误?
我们的团队急于在7天内发布我们的应用,因此我们找到了另一种解决方案,至少可以减少重新路由呼叫。
因此,我们假设currentStepProgress.distanceRemaining
返回设备位置与当前步骤位置的终点之间的距离,在这种情况下,我们可以通过如下设置极限来识别驾驶员是否朝错误的方向前进>>
func navigationViewController(_ navigationViewController: NavigationViewController, shouldRerouteFrom location: CLLocation) -> Bool { return navigationViewController.navigationService.routeProgress.currentLegProgress.currentStepProgress.distanceRemaining > 500 }
在这种情况下,如果
distanceRemaining
返回超过500m,我们假设驱动程序距离实际路径越来越远,我们让SDK调用重新路由api以获取新路线。
但是请来自MAPBOX的任何人看到此问题都会为我们提供正确的答案,因为我们是付费用户,并且我们依赖于mapbox导航。