我们正在开发一个显示路线并将其导航到驾驶员的应用程序。驾驶员应该从那里经过几个航路点。我们计算从驾驶员位置到下一个点的路线。当驾驶员到达该点时,我们将计算一条新路线并将其分配给NMANavigationManager
并更新地图上的NMAMapRoute
对象。对于第一个路线,一切正常,我们看到所有操作都可以使用navigationManagerDidReroute
委托方法重新进行。
问题开始于计算新路线并将其设置为NMANavigationManager
。地图路线会使用正确的路线更新自身,但我们失去了导航语音和重新路由功能。计算并设置新路线后,无需委托方法。
我尝试了一些解决方案。这是我的startNavigation函数。我在计算路线后调用了此函数。
func startNavigation() {
self.mapView?.mapScheme = NMAMapSchemeCarNavigationDay
guard let route = self.route else {
print("Route is nil")
return
}
self.startButton.isHidden = true
self.maneuverView.isHidden = false
if let turkishPackage = NMAVoiceCatalog.sharedInstance()?.voicePackage(withId: 218) {
NMANavigationManager.sharedInstance().voicePackage = turkishPackage
}
NMANavigationManager.sharedInstance().mapTrackingEnabled = isFollowing
NMANavigationManager.sharedInstance().isVoiceEnabled = true
NMANavigationManager.sharedInstance().mapTrackingOrientation = .dynamic
NMANavigationManager.sharedInstance().isSpeedWarningEnabled = true
NMANavigationManager.sharedInstance().mapTrackingAutoZoomEnabled = true
NMANavigationManager.sharedInstance().delegate = self
NMANavigationManager.sharedInstance().startTurnByTurnNavigation(route)
}
在调用navigationManagerDidReachDestination
之后,我停止了路线,然后计算路线并使用上述功能通过转弯导航开始转弯。但是我很早就提到了没有调用这种新路线的navigationManager委托方法。
我还使用了[[NMANavigationManager sharedNavigationManager] setRoute:newRoute];
函数来设置导航管理器的新计算路线,但是那也行不通。
我阅读了here maps guide文档中的所有详细信息
我不确定我的方法是错误还是遗漏。可能是您可以帮助我了解导航管理器路由时在其上计算多条路线和导航的最佳算法。