說到百度地圖,哎,一把血淚史啊。說到百度地圖導(dǎo)航功能簡直我想哭啊。
當(dāng)年做一個基于地圖的app,本來基本完工了,老大說加個導(dǎo)航吧,我一看老大發(fā)話了,加就加唄。老大說給你兩天做完吧。當(dāng)時我就爆發(fā)了我的小宇宙啊,什么兩天!!! 兩天!!! 臥槽,你看不起誰呢!半天!(當(dāng)年原諒我的年少輕狂,不知天高地厚) 然后牛逼都吹了,就開始做唄。然后我就懵逼了,導(dǎo)入導(dǎo)航sdk,配一下基礎(chǔ)環(huán)境,這種渣渣的小事,10分鐘干掉。就當(dāng)我想開展下一步的時候,忽然一股血光,出現(xiàn)在我的屏幕上,臥槽,xcode大姨媽了。竟然爆紅了。我一看肯定導(dǎo)航sdk有問題啊。心想百度導(dǎo)航頁太坑了吧,剛導(dǎo)入就把xcode大姨媽給搞出來了(完了,老司機(jī)的駕照暴露了。。。)然后沒辦法啊,有問題就解決唄。百度一下,官方說sdk跟第三方庫沖突,會出問題的第三方庫有 MBProgressHUD、AFNetworking。并給了兩種解決方案:
一
臨時解決方案:把libbaiduNaviSDK.a移到“Linked Frameworks and Libraries”的最后一個。
二
使用v3.0.2,官網(wǎng)上的版本是v3.0.0,論壇的是v3.0.2,并附有下載鏈接。提示:下載的v3.0.2不帶libbaiduNaviSDK.a文件,請將v3.0.0的.a文件拖入工程。
當(dāng)我性質(zhì)勃勃的按方案一,做了之后,臥槽坑人啊,不管用啊。。那就方案二吧,結(jié)果用公司的龜速網(wǎng),終于下了200M的3.0.2之后,然后替換完sdk,commit+b,臥槽,又坑我。還是不行啊。
后來發(fā)現(xiàn)這兩種解決方案,基本看臉啊,誰讓我長了一張,遭人嫉妒的臉呢,哎,故意跟我過不去啊。沒辦法自己解決吧。不就是個編譯錯誤嘛,首先我就把麻痹progres給干掉了。。我的心啊,換上mvprogress,修改N處代碼,編譯,果然編譯錯誤少了一個,最后爆紅在afn的一個文件,此時寶寶已經(jīng)崩潰了,你不能讓我再干掉anf換成asi吧。此時已經(jīng)臨近與組長的半天之約了。一怒之下,把debug模式調(diào)成release模式,臥槽奇跡發(fā)生了,編譯竟然通過了。此時上午結(jié)束還有5分鐘,然后貼上下面的導(dǎo)航代碼搞定。(唉,奉勸各位程序員同仁,努力工作,為了自己吹過的牛逼。。。)
//真實(shí)GPS導(dǎo)航
- (void)realNavi
{
if (![self checkServicesInited]) return;
[self startNavi];
}
- (void)startNavi
{
BOOL useMyLocation = YES;
NSMutableArray *nodesArray = [[NSMutableArray alloc]initWithCapacity:2];
//起點(diǎn) 傳入的是原始的經(jīng)緯度坐標(biāo),若使用的是百度地圖坐標(biāo),可以使用BNTools類進(jìn)行坐標(biāo)轉(zhuǎn)化
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
//算路成功回調(diào)
-(void)routePlanDidFinished:(NSDictionary *)userInfo
{
NSLog(@"算路成功");
//路徑規(guī)劃成功,開始導(dǎo)航
[BNCoreServices_UI showPage:BNaviUI_NormalNavi delegate:self extParams:nil];
}
//算路失敗回調(diào)
- (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:@"無法發(fā)起導(dǎo)航"];
NSLog(@"無法發(fā)起導(dǎo)航");
break;
case BNAVI_ROUTEPLAN_ERROR_LOCATIONSERVICECLOSED:
NSLog(@"定位服務(wù)未開啟,請到系統(tǒng)設(shè)置中打開定位服務(wù)。");
[SVProgressHUD showErrorWithStatus:@"定位服務(wù)未開啟"];
break;
case BNAVI_ROUTEPLAN_ERROR_NODESTOONEAR:
NSLog(@"起終點(diǎn)距離起終點(diǎn)太近");
[SVProgressHUD showErrorWithStatus:@"起終點(diǎn)距離太近"];
break;
default:
NSLog(@"算路失敗");
[SVProgressHUD showErrorWithStatus:@"算路失敗"];
break;
}
}