ios百度地圖基礎導航實現-比官網更加詳細通俗易懂
準備工作:到百度地圖API官網申請AK以及下載SDK
到百度地圖API官網註冊一個開發者,然後到這個鏈接申請AK碼http://lbsyun.baidu.com/apiconsole/key
然後到這個鏈接下載百度導航的SDKhttp://lbsyun.baidu.com/index.php?title=ios-navsdk/sdkios-nav-download
第一步:將下載的SDK中的文件拷貝到新建工程之下
下載下來的SDK資源包如下,將圖中的框起來的文件add file到項目下或者直接拖入工程之中
第二步:將SDK和Framework添加進工程
把baiduNaviSDK文件夾添加到工程中,把UserNotifications.framework、AudioToolbox.framework、ImageIO.framework、CoreMotion.framework、CoreLocation.framework、CoreTelephony.framework、MediaPlayer.framework、AVFoundation.framework、SystemConfiguration.framework、JavaScriptCore.framework、Security.framework 、OpenGLES.framework 、GLKit.framework 、libstdc++6.0.9.dylib、libc++.tbd、libsqlite3.0.tbd、libz.1.2.5.tbd這幾個framework添加到工程中,添加方法爲在Xcode中單擊工程文件,選擇Build Phrases選項,點擊Link Binary with Libraries下的“+”逐個添加。另外thirdlibs中的兩個靜態庫libssl.a、libcrypto.a也要添加到工程中,如下所示:(注意喲要仔細對照別漏了)
第三步:修改Build Settings設置項
在Build Settings中, “Other Linker Flags”添加“-ObjC” 標識
第四步:配置.plist文件
設置 “Required background modes”、 “App Transport Security Settings”(可以根據自身情況設置,導航sdk已經全面支持https)、”NSLocationAlwaysUsageDescription”、”NSLocationWhenInUseUsageDescription”(兩個定位功能請求可以任選一個不用兩個都選)、 ”View controller-based status bar appearance”這5項,如下圖:
也可複製下面源碼:
<key>NSLocationAlwaysUsageDescription</key>
<string>只有開啓定位功能才能正常使用百度導航</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>只有開啓定位功能才能正常使用百度導航</string>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
<string>location</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
第五步:進入正題-發起導航
(1)在AppDelegate.m中配置AK碼
進入AppDelegate.m中,進行AK碼設置並開啓導航功能,代碼如下:
#import "BNCoreServices.h"
#import "ViewController.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 初始化導航SDK
[BNCoreServices_Instance initServices:BaiduMapAK];
[BNCoreServices_Instance startServicesAsyn:nil fail:nil];
return YES;
}
(2)在需要使用導航功能的controller.m中
import入需要使用的頭文件,以及需要使用的delegate,代碼如下:
#import "BNRoutePlanModel.h"
#import "BNCoreServices.h"
#import "BNaviModel.h"
@interface ViewController ()<BNNaviUIManagerDelegate,BNNaviRoutePlanDelegate>
@end
(3)在viewDidLoad中創建個Button用以調用方法(當然你也可以根據自己情況更換調用的方式),代碼如下:
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button = [[UIButton alloc]init];
button.frame = CGRectMake(160, 100, 100, 100);
[button setTitle:@"開始導航" forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button setBackgroundColor:[UIColor grayColor]];
[button addTarget:self action:@selector(startNavi) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
(4)進入正題,調用方法實現,代碼如下:
//發起導航
- (void)startNavi
{
//節點數組
NSMutableArray *nodesArray = [[NSMutableArray alloc] initWithCapacity:2];
//起點
BNRoutePlanNode *startNode = [[BNRoutePlanNode alloc] init];
startNode.pos = [[BNPosition alloc] init];
startNode.pos.x = 113.936392;
startNode.pos.y = 22.547058;
startNode.pos.eType = BNCoordinate_BaiduMapSDK;
[nodesArray addObject:startNode];
//終點
BNRoutePlanNode *endNode = [[BNRoutePlanNode alloc] init];
endNode.pos = [[BNPosition alloc] init];
endNode.pos.x = 114.077075;
endNode.pos.y = 22.543634;
endNode.pos.eType = BNCoordinate_BaiduMapSDK;
[nodesArray addObject:endNode];
//發起路徑規劃
[BNCoreServices_RoutePlan startNaviRoutePlan:BNRoutePlanMode_Recommend naviNodes:nodesArray time:nil delegete:self userInfo:nil];
}
//算路成功後,在回調函數中發起導航,如下:
//算路成功回調
-(void)routePlanDidFinished:(NSDictionary *)userInfo
{
NSLog(@"算路成功");
//路徑規劃成功,開始導航
[BNCoreServices_UI showPage:BNaviUI_NormalNavi delegate:self extParams:nil];
}