Swift 調(diào)用百度地圖導(dǎo)航SDK (圖文講解)

Swift 3.0基礎(chǔ)框架快速開發(fā)開源框架(http://www.itdecent.cn/p/0f950c180cb8)
版本說明:本文講的內(nèi)容所使用的是Xcode版本是7.2版本 Swift是2.1版本。

1.第一部申請(qǐng)百度開發(fā)者 如下圖:申請(qǐng)成功

6B377037-980B-461D-A512-9AF2BC365EDB.png

2.再次打開 http://lbsyun.baidu.com 選擇->開發(fā)->IOS導(dǎo)航SDK 如下圖:

7555B3C9-7ED5-4425-BCA5-7255EAA00535.png
7B302071-165C-4422-A809-A6E371E7D6DF.png
7B659036-2E7C-472A-9F51-56C0B2823FB7.png

3.導(dǎo)航的SDK已經(jīng)下載完畢

 演示SDK版本是V2.0.6 

4.再次回到 http://lbsyun.baidu.com 選擇申請(qǐng)密匙->創(chuàng)建應(yīng)用

55033B3A-1914-4B1D-8C1A-0947CD2DB557.png
BD958661-C4F9-44AB-A46E-273BA1457B2D.png
40BCFEA6-E310-429C-9808-2E5FE646F0A0.png

5.提交完成后是這樣的

BF2221B5-8E75-4B10-B1C0-523608269D1B.png

6.好了以上申請(qǐng)Key已經(jīng)完成了,打開你的Xcode吧 創(chuàng)建你的IOS應(yīng)用吧

------------------------這里是分割線--------------------------------

7.先做個(gè)簡(jiǎn)單的起點(diǎn)和終點(diǎn)的界面 如下圖:

919A40F0-FDE7-4477-982D-5337EEF3556C.png

8.把下載好的SDK導(dǎo)入到當(dāng)前Xcode工程下:如下圖


0B486EE5-4CFF-47AA-B5F1-8AD943B7D4D5.png
C40F0CFB-66F3-4D09-9BB2-C1AB3E9FC143.png
AC033474-2F86-4C49-81F0-FC9D29FB5C56.png

8.此時(shí)我們的目錄是這樣的


9BDA2491-FD1D-4F63-BDB2-474DA64F4F96.png

9.我們運(yùn)行下,看看能不能運(yùn)行 如下圖:


D08E9DB8-F44C-4A9D-BDAD-DF8EAFDC0C68.png

10.是不是一堆錯(cuò)誤?怎么解決呢,跟我一步步做(導(dǎo)致錯(cuò)誤的是因?yàn)锳RC的原因,具體我也不懂)
7E728EB8-17A5-41B2-B339-671E4C3F8F94.png

11.是不是在運(yùn)行,可以跑起來了?,既然可以跑起來了,那么我們就開始調(diào)用SDK導(dǎo)航了 , 首先先做個(gè)OC跟Swift橋接庫(如何橋接 OC跟swift 這個(gè)百度吧 很多了 不一一介紹了), 現(xiàn)在我們的目錄是這樣的,運(yùn)行一下,是不是一樣可以運(yùn)行,如果可以證明你步驟對(duì)了

#import "BNRoutePlanModel.h"
#import "BNCoreServices.h" 
7112CBC2-4F65-48C1-A00C-2BA4E2FAC091.png

12.好了,我們?cè)谛陆ㄒ粋€(gè)BaiduNavViewController.swift(來看看我們的結(jié)構(gòu))需要實(shí)現(xiàn)百度導(dǎo)航的協(xié)議 如下圖:


import UIKit

class BaiduNavViewController: UIViewController, BNNaviUIManagerDelegate,BNNaviRoutePlanDelegate{
    
    var Begin_longitude:Double=0.0  //初始點(diǎn)X
    var Begin_latitude:Double=0.0   //初始點(diǎn)Y
    
    private var  longitude=CLLocationDegrees()  //初始點(diǎn)經(jīng)度
    private var latitude=CLLocationDegrees()     //初始點(diǎn)緯度
    override func viewDidLoad() {
        super.viewDidLoad()
        longitude = Begin_longitude   //起點(diǎn)經(jīng)度
        latitude =  Begin_latitude    //起點(diǎn)緯度
    }
    //算路回調(diào)成功
    func routePlanDidFinished(userInfo: [NSObject : AnyObject]!) {
    }
    //算路回調(diào)失敗
    func routePlanDidFailedWithError(error: NSError!, andUserInfo userInfo: [NSObject : AnyObject]!) {
    }
    //算路取消回調(diào)
    func routePlanDidUserCanceled(userInfo: [NSObject : AnyObject]!) {
    }
    //退出導(dǎo)航
    func onExitNaviUI(extraInfo: [NSObject : AnyObject]!) {
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
350EECB5-07C6-404F-8E1C-0C1795A5D1E0.png

13.運(yùn)行,是不是沒有出錯(cuò),如果沒出錯(cuò),繼續(xù)跟上(在看看我們的代碼已經(jīng)變成這樣了)


var services =  BNCoreServices.GetInstance()   //InitSDK
let NAVI_APP_KEY = "RbeSg6mnC784wVOfzI6WDtXj"

  //初始化導(dǎo)航SDK
        services.initServices(NAVI_APP_KEY)
        services.startServicesAsyn({ () -> Void in
            print("導(dǎo)航初始化成功")
            }) { () -> Void in
                print("導(dǎo)航初始化失敗")
        }

86C84E0A-8C03-4DC3-A033-44D1A2031922.png

import UIKit

class BaiduNavViewController: UIViewController, BNNaviUIManagerDelegate,BNNaviRoutePlanDelegate{
    
    var Begin_longitude:Double=0.0  //初始點(diǎn)X 經(jīng)度
    var Begin_latitude:Double=0.0   //初始點(diǎn)Y 緯度
    
    var End_longitude:Double=0.0  //終點(diǎn)X 經(jīng)度
    var End_latitude:Double=0.0   //終點(diǎn)Y 緯度
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        checkServicesInited(Begin_longitude,latitude: Begin_latitude,CurrentaddressX: End_longitude,CurrentaddressY: End_latitude)
        
    }
    
    //檢查引擎是否初始化完成
    func checkServicesInited(longitude:Double ,latitude:Double ,CurrentaddressX:Double ,CurrentaddressY:Double){
        services  = BNCoreServices.GetInstance()
        if(!services.isServicesInited()){    //檢查引擎是否初始化完成
            print("引擎尚未初始化完成,稍后再試")
        }else{
            startNav(longitude,latitude: latitude,CurrentaddressX: CurrentaddressX,CurrentaddressY: CurrentaddressY)    //啟動(dòng)導(dǎo)航
        }
    }
    func startNav(longitude:Double ,latitude:Double,CurrentaddressX:Double ,CurrentaddressY:Double ){
        let nodesArray:NSMutableArray =  NSMutableArray(capacity: 2)
        //起點(diǎn) 傳入的是原始的經(jīng)緯度坐標(biāo),若使用的是百度地圖坐標(biāo),可以使用BNTools類進(jìn)行坐標(biāo)轉(zhuǎn)化
        let startNode:BNRoutePlanNode = BNRoutePlanNode()
        startNode.pos = BNPosition()
        //這里獲取到當(dāng)前的位置的經(jīng)度緯度就可以了
        startNode.pos.x = longitude//經(jīng)度
        startNode.pos.y = latitude   //緯度
        startNode.pos.eType = BNCoordinate_BaiduMapSDK
        nodesArray.addObject(startNode)
        //終點(diǎn)
        let  endNode:BNRoutePlanNode = BNRoutePlanNode()
        endNode.pos = BNPosition()
        endNode.pos.x = CurrentaddressX //經(jīng)度
        endNode.pos.y = CurrentaddressY  //緯度
        endNode.pos.eType = BNCoordinate_BaiduMapSDK
        nodesArray.addObject(endNode)
        let GONav = BNCoreServices.RoutePlanService()
        GONav.startNaviRoutePlan(BNRoutePlanMode_Highway, naviNodes: nodesArray as [AnyObject], time: nil, delegete: self, userInfo: nil   )
    } 
    //算路回調(diào)成功
    func routePlanDidFinished(userInfo: [NSObject : AnyObject]!) {
        //路徑規(guī)劃成功,開始導(dǎo)航
        let uiservice =  BNCoreServices.UIService()
        uiservice.showNaviUI(BN_NaviTypeReal, delegete: self, isNeedLandscape: true)
    }
    //算路回調(diào)失敗
    func routePlanDidFailedWithError(error: NSError!, andUserInfo userInfo: [NSObject : AnyObject]!) {
        if (error.code == 100) {
            print("獲取地理位置失敗")
        }
        else if (error.code == 102)
        {
            print("定位服務(wù)未開啟")
        }
    }
    //算路取消回調(diào)
    func routePlanDidUserCanceled(userInfo: [NSObject : AnyObject]!) {
        
    }
    //退出導(dǎo)航
    func onExitNaviUI(extraInfo: [NSObject : AnyObject]!) {
        
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

424A21B0-904F-408F-A163-10531CD248F5.png
D0D79218-C7BD-4AD5-BEC3-9D1671E6B651.png

14.我們運(yùn)行...一堆錯(cuò)誤 100多個(gè)(什么情況坑我呢吧,別急,慢慢來??)

349B47F5-38EE-4391-AC47-9C04D72F617C.png

15.開始解決我故意留下來最后的錯(cuò)誤吧(其實(shí)是一開始忘記做那個(gè)步驟了...)??

43BC4AFF-B225-41DE-A5DE-2DD5F72A570B.png

16.編譯,是不是沒錯(cuò)誤了,基本上我們的程序差不多完成了,但是編譯完程序崩潰了..(別急還有步驟)


72F6A0E6-5D81-46BD-88F2-A04B2DA59542.png

17.還有個(gè)最最關(guān)鍵


CE4226F7-B3CB-4EE7-AD64-BE72D316296F.png

18.好了 運(yùn)行程序吧,沒錯(cuò)誤了,那么我們開始來運(yùn)行導(dǎo)航了
首先先添加一個(gè)navigationController 來看看我們Main.storyboard 的界面
2B2B39C4-AAB2-4A3C-B683-136A25E89DC6.png

19.在看看ViewController.swift 代碼

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var Begin_longitude: UITextField!
    
    @IBOutlet weak var Begin_latitude: UITextField!
    
    @IBOutlet weak var End_longitude: UITextField!
    
    @IBOutlet weak var End_latitude: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        Begin_longitude.text=113.3684990000.description
        Begin_latitude.text=23.1304880000.description
       
        End_longitude.text=114.0661120000.description
        End_latitude.text=22.5485150000.description
        
    }
    
    @IBAction func goNav(sender: AnyObject) {
        let  baidunav = BaiduNavViewController()
        
          baidunav.Begin_longitude=Double(Begin_longitude.text!)!  //初始點(diǎn)X 經(jīng)度
         baidunav.Begin_latitude=Double(Begin_latitude.text!)!   //初始點(diǎn)Y 緯度
        
          baidunav.End_longitude=Double(End_longitude.text!)!   //終點(diǎn)X 經(jīng)度
         baidunav.End_latitude=Double(End_latitude.text!)!  //終點(diǎn)Y 緯度
        

        self.navigationController?.pushViewController(baidunav, animated: true)
    }
    

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
      
    }


}
393E6FCA-5B05-47DD-909C-8605BE4B7310.png

20.好了,我們運(yùn)行吧 已經(jīng)完成了 (注:經(jīng)度緯度可以在http://www.gpsspg.com/maps.htm 里面獲取,如果做得靈活點(diǎn)可以通過定位來獲取數(shù)據(jù)),我們來看看我們做出來的成果吧

9F02B24A-9596-4436-A704-C20702250E5E.png

TTS授權(quán)是語音功能 如需要請(qǐng)到http://lbsyun.baidu.com/index.php?title=ios-navsdk/guide/voice 申請(qǐng)授權(quán)

CB7845D4-D8EF-4413-B24B-87FE5454D274.png

37420455-E72E-4DB2-919B-FCCF65031AA8.png
3E0E3C6D-C566-4357-92D8-992EBDDC8AC4.png

總算寫完了...大功告成,如有什么改進(jìn),請(qǐng)?jiān)诹粞蕴幜粞浴?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容