39.iOS百度地圖(手把手教)

  • 一.進(jìn)入百度地圖官方(注冊(cè)應(yīng)用)
  • 1.2.創(chuàng)建應(yīng)用

    FBABCE88-01DC-4183-A8D9-1A84DD0A94AA.png
  • 1.3.具體的應(yīng)用填寫

具體的應(yīng)用填寫
  • 1.4.安全碼(也就是百度地圖的安全碼)
.安全碼(也就是百度地圖的安全碼)

二.iOS地圖開(kāi)發(fā)

  • 2.1.地圖開(kāi)發(fā)的選擇類型(根據(jù)自己的需求選擇)


    下載地圖的有關(guān)things
  • 2.2.相關(guān)下載

![相關(guān)下載](http://upload-images.jianshu.io/upload_images/1728484-c3bbc6b87c9df233.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

三.下面真正的進(jìn)行開(kāi)發(fā)(先實(shí)現(xiàn)地圖的展示)

下面的操作按著這6部分來(lái)做
  • 3.1申請(qǐng)秘鑰直接在應(yīng)用里面獲取就好了
應(yīng)用秘鑰
  • 3.2.注意事項(xiàng)(一共12項(xiàng))

  • 3.2.1.靜態(tài)庫(kù)中采用ObjectC++實(shí)現(xiàn),因此需要您保證您工程中至少有一個(gè).mm后綴的源文件(您可以將任意一個(gè).m后綴的文件改名為.mm),或者在工程屬性中指定編譯方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并將其設(shè)置為"Objective-C++"

    3.2.1靜態(tài)庫(kù)中采用ObjectC++實(shí)現(xiàn)
    • 3.2.2.如果您只在Xib文件中使用了BMKMapView,沒(méi)有在代碼中使用BMKMapView,編譯器在鏈接時(shí)不會(huì)鏈接對(duì)應(yīng)符號(hào),需要在工程屬性中顯式設(shè)定:在Xcode的Project -> Edit Active Target -> Build Setting -> Other Linker Flags中添加-ObjC
    工程屬性中顯式設(shè)定
    • 3.2.3.授權(quán)Key的申請(qǐng):新、舊Key之間不可通用,即新Key只可以使用在v2.0.2及后續(xù)版本的SDK中,舊的Key只適用于v2.0.1及之前版本的SDK;如果還沒(méi)有授權(quán)Key,請(qǐng) 申請(qǐng)密鑰(前面已經(jīng)申請(qǐng)過(guò),在此就不再重復(fù)了)

    • 3.2.4.由于iOS9改用更安全的https,為了能夠在iOS9中正常使用地圖SDK,請(qǐng)?jiān)?Info.plist"中進(jìn)行如下配置,否則影響SDK的使用。

    安全的https
    • 3.2.5.如果在iOS9中使用了調(diào)起百度地圖客戶端功能,必須在"Info.plist"中進(jìn)行如下配置,否則不能調(diào)起百度地圖客戶端。

        <key>LSApplicationQueriesSchemes</key>
          <array>
             <string>baidumap</string>
         </array>
      
      調(diào)起百度地圖客戶端功能
    • 3.2.6.管理地圖的生命周期:自2.0.0起,BMKMapView新增viewWillAppear、viewWillDisappear方法來(lái)控制BMKMapView的生命周期,并且在一個(gè)時(shí)刻只能有一個(gè)BMKMapView接受回調(diào)消息,因此在使用BMKMapView的viewController中需要在viewWillAppear、viewWillDisappear方法中調(diào)用BMKMapView的對(duì)應(yīng)的方法,并處理delegate

    管理地圖的生命周期
    • 3.2.7.自iOS SDK v2.5.0起,為了對(duì)iOS8的定位能力做兼容,做了相應(yīng)的修改,開(kāi)發(fā)者在使用過(guò)程中注意事項(xiàng)如下: 需要在info.plist里添加(以下二選一,兩個(gè)都添加默認(rèn)使用NSLocationWhenInUseUsageDescription):
      NSLocationWhenInUseUsageDescription ,允許在前臺(tái)使用時(shí)獲取GPS的描述
      NSLocationAlwaysUsageDescription ,允許永久使用GPS的描述

      GPS定位請(qǐng)求
    • 3.2.8.在使用Xcode6進(jìn)行SDK開(kāi)發(fā)過(guò)程中,需要在info.plist中添加:Bundle display name ,且其值不能為空(Xcode6新建的項(xiàng)目沒(méi)有此配置,若沒(méi)有會(huì)造成manager start failed)

    3.2.8.Bundle display name
    • 3.2.9.百度地圖iOS SDK v2.5.0起,對(duì)arm64進(jìn)行了支持適配,開(kāi)發(fā)包體積有所增加。但根據(jù)開(kāi)發(fā)者在研發(fā)過(guò)程中的選擇,最終生成的APP體積并不會(huì)發(fā)生較大的變化。

    • 3.2.10.確認(rèn)項(xiàng)目中添加mapapi.bundle文件以及添加方法正確,不能刪除或隨意更改其中files文件夾下的內(nèi)容:
      注:mapapi.bundle中存儲(chǔ)了定位、默認(rèn)大頭針標(biāo)注View及路線關(guān)鍵點(diǎn)的資源圖片,還存儲(chǔ)了矢量地圖繪制必需的資源文件。如果您不需要使用內(nèi)置的圖片顯示功能,則可以刪除bundle文件中的image文件夾。您也可以根據(jù)具體需求任意替換或刪除該bundle中image文件夾的圖片文件。添加方式:將mapapi.bundle拷貝到您的工程目錄,直接將該bundle文件托拽至Xcode工程左側(cè)的Groups&Files中即可。若您需要替換定位、指南針的圖標(biāo),請(qǐng)保留原文件名稱,否則不顯示替換的新圖片,默認(rèn)大頭針標(biāo)注與路線關(guān)鍵點(diǎn)的新圖片名稱可自定義名稱。

    3.2.10.mapapi.bundle文件以及添加方法

    注意:如果采用的cocopods集成的SDK就不需要導(dǎo)入

    • 3.2.11、注意BMKManager對(duì)象的生命周期管理,在使用地圖SDK期間不能釋放該對(duì)象,尤其在arc情況下注意避免提前被自動(dòng)釋放,否則,該對(duì)象一旦被釋放,網(wǎng)絡(luò)模塊將不可用,地圖無(wú)法加載,檢索失敗。

    答: 也就是我們?cè)诙xBMKManager對(duì)象的時(shí)候用strong就好,強(qiáng)引用,防止對(duì)象被釋放掉

    • 3.2.12、app在前后臺(tái)切換時(shí),需要使用下面的代碼停止地圖的渲染和openGL的繪制(V2.10.0后不需要再調(diào)用):

      - (void)applicationWillResignActive:(UIApplication *)application {
          //當(dāng)應(yīng)用即將后臺(tái)時(shí)調(diào)用,停止一切調(diào)用opengl相關(guān)的操作
          [BMKMapView willBackGround];
       }
      - (void)applicationDidBecomeActive:(UIApplication *)application {
          //當(dāng)應(yīng)用恢復(fù)前臺(tái)狀態(tài)時(shí)調(diào)用,回復(fù)地圖的渲染和opengl相關(guān)的操作
          [BMKMapView didForeGround];
      }
      
  • 3.3.配置開(kāi)發(fā)環(huán)境(cocopods導(dǎo)入手動(dòng)任選一個(gè))

    • ** 第一種cocopods導(dǎo)入**(比較簡(jiǎn)單)

      pod 'BaiduMapKit', '~> 3.1.0'
      

    成功后這些會(huì)被自動(dòng)生成


    成功后這些會(huì)被自動(dòng)生成
    • 第二種: 手動(dòng)配置.framework形式開(kāi)發(fā)包
    [這個(gè)自己看官方文檔](http://lbsyun.baidu.com/index.php?title=iossdk/guide/buildproject)
    
  • 3.4.集成結(jié)束,下面咱們就使用一下


    百度地圖的調(diào)用
    • 3.4.1.初始化BMKMapManager
      里面包含所有的類名
      導(dǎo)入 #import <BaiduMapAPI_Map/BMKMapComponent.h>
    BMKMapComponent.h包含所有的類名
    • 3.4.2.在您的AppDelegate.h文件中添加BMKMapManager的定義
      @interface AppDelegate () <UIApplicationDelegate>
      {
      BMKMapManager* _mapManager;
      }

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      
       /**
        *   注冊(cè)百度地圖
        */
        // 要使用百度地圖,請(qǐng)先啟動(dòng)BaiduMapManager
        _mapManager = [[BMKMapManager alloc]init];
        // 如果要關(guān)注網(wǎng)絡(luò)及授權(quán)驗(yàn)證事件,請(qǐng)?jiān)O(shè)定 generalDelegate參數(shù)
        BOOL ret = [_mapManager start:@"35WfYq1UDlQoGLgUnHYoK1bklZIYxjeV"  generalDelegate:nil];
      
         if (!ret) {
      
               NSLog(@"開(kāi)啟失敗");
          }
      

    運(yùn)行之后可能會(huì)報(bào)錯(cuò)

    cocopods導(dǎo)入運(yùn)行之后可能會(huì)報(bào)錯(cuò)

    解決辦法:

    解決辦法:

    再次運(yùn)行就不會(huì)報(bào)錯(cuò)了,但是可能會(huì)開(kāi)啟失敗

    開(kāi)啟失敗的解決辦法
    • 3.4.3.開(kāi)啟成功之后的事(自己創(chuàng)建一個(gè)控制器作為window的根控制器)
自己創(chuàng)建一個(gè)存放mapView的控制器

(1).導(dǎo)入 #import <BaiduMapAPI_Map/BMKMapComponent.h>

(2). 創(chuàng)建BMKMapView對(duì)象

 //寬高的設(shè)置
 #define WIDTH   [UIScreen mainScreen].bounds.size.width
 #define HEIGHT  [UIScreen mainScreen].bounds.size.height
 @property(nonatomic,strong) BMKMapView *bMKMapView;

 -(BMKMapView *)bMKMapView
 {
      if (!_bMKMapView) {
    
        _bMKMapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];
     
        }
     return _bMKMapView;
 }

-(void)viewWillAppear:(BOOL)animated
{
   [self.bMKMapView viewWillAppear];
   self.bMKMapView.delegate = self; // 此處記得不用的時(shí)候需要置nil,否則影響內(nèi)存的釋放
}
-(void)viewWillDisappear:(BOOL)animated
{
   [self.bMKMapView viewWillDisappear];
   self.bMKMapView.delegate = nil; // 不用時(shí),置nil
}

(3).加載地圖

   [self.view addSubview:self.bMKMapView];

到此最簡(jiǎn)單的地圖展示就可以出來(lái)了

最簡(jiǎn)單的地圖展示

最簡(jiǎn)單的地圖展示 密碼: srbp

四.實(shí)現(xiàn)百度地圖的周邊搜做功能

簡(jiǎn)單的展示:

百度地圖的周邊搜做功能
  • 4.1.導(dǎo)入靜態(tài)庫(kù)里面的類

     #import <BaiduMapAPI_Search/BMKPoiSearch.h>
     倆代理 一個(gè)地圖代理,一個(gè)搜索代理 <BMKMapViewDelegate,BMKPoiSearchDelegate>
    
靜態(tài)庫(kù)里面的類導(dǎo)入
  • 4.2.加入方法發(fā)起檢索(檢索方法必須放到地圖顯示出來(lái)以后)
    否則回報(bào)如下的錯(cuò)


    放在地圖之前報(bào)錯(cuò)
  • 4.3.把檢索的方法寫在地圖顯示之后的代理方法里面
#pragma mark  長(zhǎng)按地圖發(fā)起檢索
-(void)mapview:(BMKMapView *)mapView onLongClick:(CLLocationCoordinate2D)coordinate
{
    //1.初始化檢索對(duì)象(在懶加載里面)
 
    //2.發(fā)起檢索
    BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];
    //當(dāng)前頁(yè)碼
    option.pageIndex = 0;
    //每頁(yè)顯示的數(shù)據(jù)
    option.pageCapacity = 10;
    option.location = (CLLocationCoordinate2D){39.915, 116.404};
    option.keyword = @"小吃";

    BOOL flag = [self.searcher poiSearchNearBy:option];

   //這mrc的情況,arc不需要
   //[option release];

    if(flag)
   {
        NSLog(@"周邊檢索發(fā)送成功");
   }
   else
   {
       NSLog(@"周邊檢索發(fā)送失敗");
   }
}

有可能錯(cuò)
報(bào)錯(cuò)處理
  • 4.4.數(shù)據(jù)檢索成功之后打印出來(lái)


    數(shù)據(jù)檢索成功之后打印出來(lái)
  • 4.5.以大頭陣的形式展示出來(lái)

          /**
           *  4.添加大頭針
           */
          
          // 添加一個(gè)PointAnnotation
          BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
          //經(jīng)緯度傳進(jìn)來(lái)
          annotation.coordinate = poiInfo.pt;
          //名字傳進(jìn)來(lái)
          annotation.title = poiInfo.name;
          //地址傳進(jìn)來(lái)
          annotation.subtitle = poiInfo.address;
          //添加大頭針
          [self.bMKMapView addAnnotation:annotation];
    
以大頭陣的形式展示出來(lái)

處理辦法:

/**
 *  3.1.修改當(dāng)前顯示區(qū)域
 */
//跨度
BMKCoordinateSpan span = BMKCoordinateSpanMake(0.014383, 0.012235);
//區(qū)域范圍
BMKCoordinateRegion coordinateRegion = BMKCoordinateRegionMake(coordinate, span);
//在地圖上添加區(qū)域
[self.bMKMapView setRegion:coordinateRegion animated:YES];
完整的地圖

封裝好的百度地圖:實(shí)現(xiàn)定位,POI搜索 密碼: xi53

提醒在導(dǎo)入相關(guān)百度地圖的類時(shí),一共有以下幾個(gè)

  #import <BaiduMapAPI_Map/BMKAnnotationView.h>
  #import <BaiduMapAPI_Base/BMKBaseComponent.h>
  #import "BaiduMapAPI_Cloud/BMKCloudSearchComponent.h"
  #import "BaiduMapAPI_Location/BMKLocationComponent.h"
  #import <BaiduMapAPI_Radar/BMKRadarComponent.h>
  #import <BaiduMapAPI_Utils/BMKUtilsComponent.h>
  #import <BaiduMapAPI_Map/BMKMapComponent.h>
  #import <BaiduMapAPI_Search/BMKSearchComponent.h>
  • 有問(wèn)題一起交流,路過(guò)的給個(gè)喜歡,謝謝!!!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,238評(píng)論 3 428
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 177,823評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 63,604評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,339評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 55,713評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評(píng)論 3 445
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,893評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,448評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,201評(píng)論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,397評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,631評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 35,033評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 36,321評(píng)論 1 293
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,128評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,347評(píng)論 2 377

推薦閱讀更多精彩內(nèi)容

  • 各位小伙伴們大家好,今天我向大家介紹一下蘋果百度地圖的使用方法,因?yàn)樽鲞^(guò)一些想關(guān)的APP,感覺(jué)百度地圖還是挺方便的...
    Lee0528閱讀 14,741評(píng)論 18 46
  • 一、概述 百度地圖 iOS SDK是一套基于iOS 5.0及以上版本設(shè)備的應(yīng)用程序接口,不僅提供展示地圖的基本接口...
    DestinyFighter_閱讀 3,090評(píng)論 0 11
  • 雖然百度地圖已經(jīng)用了很多次了,但是每次都浪費(fèi)很長(zhǎng)時(shí)間來(lái)配置,所以今天把配置百度地圖SDK的過(guò)程記錄下來(lái),也方便日后...
    Wynter_Wang閱讀 3,585評(píng)論 0 3
  • 我從小就不是一個(gè)溫柔的女孩子,很多人夸我文靜乖巧,其實(shí)那只是我不想說(shuō)話沒(méi)有其他小孩子活潑愛(ài)說(shuō)話而已。 我的文靜從來(lái)...
    6ab665a250b5閱讀 289評(píng)論 0 0
  • 安卓允許用戶發(fā)送自定義廣播(broadcast),滿足接收條件的接收器(receiver)就可以接受自定義廣播。 ...
    YueDev閱讀 2,900評(píng)論 0 1