苹果客户端:用导航模块的应用,当到岔道口不按照规划路线行驶,断网3分钟以上,当网络恢复后切换到前台,导航地图上显示的路线是导航的起点到终点的导航路线,看到自己位置再动,但是偏航后不再重新规划路径,导航页面不再根据道路实际情况刷新,就是回到原来的规划路径也不再刷新导航页面。然后我们又手动调用导航过程中重新规划路线API,规划后导航路线的实际起点是进入导航的起点。一旦出现断网后并且右上角显示从无名道路进入很可能导航页面再也能正常刷新了。请问各位高手这种不以当前位置规划路径的现象,采用何种方法才能在这种情况下重新规划路径,需要调用什么接口。下面是出现问题时的截图:
哥终于找到解决方案了:
场景:
导航过程中,把应用切换到后台,断开网络3分钟,并且行驶的路径和原来规划路径不同,再恢复网络,把应用切换到前台,导航显示的路径还是断网前的路线不再重新规划,打电话时也有导航路径不重新规划问题重复。
原因分析:
导航过程中断网偏离原来的规划路径,当网络恢复后报错:2016/04/19 19:11:23:680 NavigationManager.m:-[NavigationManager naviManager:error:]:201 Debug:函数 error.code = -3
error.localizedDescription = 已有ViewController存在,请先执行dismissNaviViewControllerAnimated:方法取消展示
高德地图再也不重新规划路径了。
修改方案:
当发现错误码为-3的导航失败时开关导航就可以。
(void)naviManager:(AMapNaviManager )naviManager error:(NSError )error
{
FLDDLogDebug(@”函数 error.code = %ld\n error.localizedDescription = %@”,(long)error.code,[NSString stringWithFormat:@”%@”,error.localizedDescription]);
if((-3 == error.code) && (self.naviManager != nil))
{ [self.naviManager stopNavi]; [self.naviManager startGPSNavi]; }
}
高德导航地图2.1分模块处理后,解决断网不重新规划路径有所变化。
当断开网络期间偏离了路线需要重新规划路径时,由于没有网络导航规划无法返回。当网络恢复时,没有返回规划响应立即返回。这个版本规划失败返回的比系统网络正常通知还快,千万别判断网络状态再重新规划路径了,不然就不能立即重新导航了。失败时,返回错误码为2.
导航地图模块化后用到的常用地图库有:AMapFoundationKit.framework,AMapNaviKit.framework,AMapSearchKit.framework,MAMapKit.framework,AMapLocationKit.framework,iflyMSC.framework。
- (void)driveManager:(AMapNaviDriveManager *)driveManager onCalculateRouteFailure:(NSError *)error { FLDDLogDebug(@"onCalculateRouteFailure:{%ld - %@}", (long)error.code, error.localizedDescription); // if((ReachableViaWiFi == [SingleAsyncSocket sharedInstance].networkStatus) || (ReachableViaWWAN == [SingleAsyncSocket sharedInstance].networkStatus) || (ReachableViaHaveNet == [SingleAsyncSocket sharedInstance].networkStatus)) // { // if(([Singleton sharedInstance].loginOrderStat == LOGIN_ORDER_STATE_SUCESS) && (SOCKECT_CONNECT_SUCESS == [SingleAsyncSocket sharedInstance].socketConnectStat)) // { // [self routeCalculate]; // } // } [self routeCalculate]; } //算路 含起点 终点 - (void)routeCalculate; { self.startPoint = [AMapNaviPoint locationWithLatitude:[Singleton sharedInstance].latitudeAll longitude:[Singleton sharedInstance].longitudeAll]; FLDDLogDebug(@"函数 _startLacation = %@\n _endLacation = %@",_startPoint,_endPoint); if((_startPoint == nil) || (_endPoint == nil)) { return; } [self.driveManager stopNavi]; [self routePlanAndStartNavi]; } - (void)routePlanAndStartNavi { [self.driveManager calculateDriveRouteWithStartPoints:@[self.startPoint] endPoints:@[self.endPoint] wayPoints:nil drivingStrategy:self.drivingStrategy]; }