关于ios百度地图导航的坑

版权所有,禁止匿名转载;禁止商业使用。



说到百度地图,哎,一把血泪史啊。说到百度地图导航功能简直我想哭啊。

当年做一个基于地图的app,本来基本完工了,老大说加个导航吧,我一看老大发话了,加就加呗。老大说给你两天做完吧。当时我就爆发了我的小宇宙啊,什么两天!!! 两天!!! 卧槽,你看不起谁呢!半天!(当年原谅我的年少轻狂,不知天高地厚) 然后牛逼都吹了,就开始做呗。然后我就懵逼了,导入导航sdk,配一下基础环境,这种渣渣的小事,10分钟干掉。就当我想开展下一步的时候,忽然一股血光,出现在我的屏幕上,卧槽,xcode大姨妈了。竟然爆红了。我一看肯定导航sdk有问题啊。心想百度导航页太坑了吧,刚导入就把xcode大姨妈给搞出来了(完了,老司机的驾照暴露了。。。)然后没办法啊,有问题就解决呗。百度一下,官方说sdk跟第三方库冲突,会出问题的第三方库有 MBProgressHUDAFNetworking。并给了两种解决方案:


解决方案

临时解决方案:把libbaiduNaviSDK.a移到“Linked Frameworks and Libraries”的最后一个。


解决方案

使用v3.0.2,官网上的版本是v3.0.0,论坛的是v3.0.2,并附有下载链接。提示:下载的v3.0.2不带libbaiduNaviSDK.a文件,请将v3.0.0.a文件拖入工程。


当我性质勃勃的按方案一,做了之后,卧槽坑人啊,不管用啊。。那就方案二吧,结果用公司的龟速网,终于下了200M的3.0.2之后,然后替换完sdk,commit+b,卧槽,又坑我。还是不行啊。


后来发现这两种解决方案,基本看脸啊,谁让我长了一张,遭人嫉妒的脸呢,哎,故意跟我过不去啊。没办法自己解决吧。不就是个编译错误嘛,首先我就把麻痹progres给干掉了。。我的心啊,换上mvprogress,修改N处代码,编译,果然编译错误少了一个,最后爆红在afn的一个文件,此时宝宝已经崩溃了,你不能让我再干掉anf换成asi吧。此时已经临近与组长的半天之约了。一怒之下,把debug模式调成release模式,卧槽奇迹发生了,编译竟然通过了。此时上午结束还有5分钟,然后贴上下面的导航代码搞定。(唉,奉劝各位程序员同仁,努力工作,为了自己吹过的牛逼。。。)


//真实GPS导航

- (void)realNavi

{

    if (![self checkServicesInited]) return;

    [self startNavi];

}


- (void)startNavi

{

  

    

    BOOL useMyLocation = YES;

    NSMutableArray *nodesArray = [[NSMutableArray alloc]initWithCapacity:2];

    //起点 传入的是原始的经纬度坐标,若使用的是百度地图坐标,可以使用BNTools类进行坐标转化

    CLLocation *myLocation = [BNCoreServices_Location getLastLocation];

    BNRoutePlanNode *startNode = [[BNRoutePlanNode alloc] init];

    startNode.pos = [[BNPosition alloc] init];

    if (useMyLocation) {

        

        startNode.pos.x = myLocation.coordinate.longitude;

        startNode.pos.y = myLocation.coordinate.latitude;

        startNode.pos.eType = BNCoordinate_OriginalGPS;

    }

    else {

        startNode.pos.x = 116.;

        startNode.pos.y = 22;

        startNode.pos.eType = BNCoordinate_BaiduMapSDK;

    }

    [nodesArray addObject:startNode];


    BNRoutePlanNode *endNode = [[BNRoutePlanNode alloc] init];

    endNode.pos = [[BNPosition alloc] init];

    endNode.pos.x = [mapaccount.longitude doubleValue];

    endNode.pos.y = [mapaccount.latitude doubleValue];

    endNode.pos.eType = BNCoordinate_BaiduMapSDK;

    [nodesArray addObject:endNode];

    

    [BNCoreServices_RoutePlan startNaviRoutePlan:BNRoutePlanMode_Recommend naviNodes:nodesArray time:nil delegete:self userInfo:nil];

}



#pragma mark - BNNaviRoutePlanDelegate

//算路成功回调

-(void)routePlanDidFinished:(NSDictionary *)userInfo

{

    NSLog(@"算路成功");

    

    //路径规划成功,开始导航

    [BNCoreServices_UI showPage:BNaviUI_NormalNavi delegate:self extParams:nil];

}


//算路失败回调

- (void)routePlanDidFailedWithError:(NSError *)error andUserInfo:(NSDictionary*)userInfo

{

    switch ([error code]%10000)

    {

        case BNAVI_ROUTEPLAN_ERROR_LOCATIONFAILED:

            [SVProgressHUD showErrorWithStatus:@"暂时无法获取您的位置,请稍后重试"];

      

            NSLog(@"暂时无法获取您的位置,请稍后重试");

            break;

        case BNAVI_ROUTEPLAN_ERROR_ROUTEPLANFAILED:

            [SVProgressHUD showErrorWithStatus:@"无法发起导航"];


            NSLog(@"无法发起导航");

            break;

        case BNAVI_ROUTEPLAN_ERROR_LOCATIONSERVICECLOSED:

            NSLog(@"定位服务未开启,请到系统设置中打开定位服务。");

            [SVProgressHUD showErrorWithStatus:@"定位服务未开启"];

 

            break;

        case BNAVI_ROUTEPLAN_ERROR_NODESTOONEAR:

            NSLog(@"起终点距离起终点太近");

            [SVProgressHUD showErrorWithStatus:@"起终点距离太近"];

        

            break;

        default:

            NSLog(@"算路失败");

            [SVProgressHUD showErrorWithStatus:@"算路失败"];

            break;

    }

}


0 0