Mapbox iOS:在导航时更新路由



我正在使用Mapbox来导航用户到一些地方。有时我需要在飞行中更新路线,例如当用户需要绕道到我设置的航路点时。

我的路由计算工作良好。我创建了一个navigationViewController,并给它一个routerresponse,一个routeIndex,一个routeOptions和一个navigationOptions,然后用它开始导航。

navigationViewController = NavigationViewController(for: myRouteResponse, routeIndex: 0, routeOptions: myNavigationRouteOptions, navigationOptions: NavigationOptions())
navigationViewController.modalPresentationStyle = .fullScreen
view.present(navigationViewController, animated: true, completion: nil)

如上所述,这很好地启动了导航。

之后,当一些事件触发时,我计算新的路点和一条带有路点的新路线。然后,我想用新的路由更新当前运行的NavigationViewController,我正在尝试这样做,如下面的代码片段所示:

let routeOptions = NavigationRouteOptions(waypoints: waypoints, profileIdentifier: .automobileAvoidingTraffic)
print("Calculating RouteResponse...")

_ = Directions.shared.calculate(routeOptions, completionHandler: { (waypoints, result) in
switch result {
case .success(let response):
guard let route = response.routes?.first else { return }
self.newRoute = route

print("""
!!!
Route Calculation Result:
Found (String(describing: response.routes?.count)) routes.
!!!
""")
print("Updating Navigation...")
self.navigationViewController = NavigationViewController(for: response, routeIndex: 0, routeOptions: self.myNavigationRouteOptions)  


case .failure(let error): print(error)
}
})

虽然这没有抛出任何错误,但它也没有做我所期望的。我有时会设法让两个实例运行,但从来没有替换当前的实例。怎么才能做到呢?当用户离开推荐的路线时,我基本上想使用mapbox本身使用的重新路由功能,但是使用一个全新的路线。这应该没有那么难,但我似乎没有得到Mapbox团队关于这个问题的回应。

这里你用一个来自呈现视图控制器的新对象重新分配一个呈现视图控制器。这不会简单地更新已经呈现的视图。

你需要的是一个方法来更新现有的NavigationViewController实例中的路由。router对象(通过navigationViewController.navigationService.router访问)有一个updateRoute方法,该方法通过IndexedRouteResponse对象接受新的路由响应。我还没有测试这种方法,但根据他们的文档,这应该工作->用提供的IndexedRouteResponse异步替换当前活动的路由。

最新更新