ios項目內嵌入百度地圖導航實現

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];
}

尾聲:以上仔細跟隨下來就能實現啦,貼一張效果圖

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章