iOS - 百度地圖一(配置、定位和三種地圖切換)

一:到百度地圖官網(wǎng) http://lbsyun.baidu.com 下載BaiduMap_IOSSDK_v3,再集成百度地圖到應用中喉童,目前下載的是最新版的SDK3.3.2版

72C65630-16DB-42F5-BA55-02F79EB1FEFE.png

二:下載好之后,將其導入到項目中顿天,再根據(jù)文檔進行以下操作

FDAA40AF-646C-4EC7-B284-83621E23479B.png
首先獲取密鑰 http://lbsyun.baidu.com/apiconsole/key <和項目的bundle ID 相關堂氯,所以一個密鑰最好只關聯(lián)一個項目>,得到的AK就是我們所需要的密鑰
D51A5227-7BD4-43B7-8B3D-4B520F8A4DB6.png
需求注意以下事項:
  • 靜態(tài)庫中采用ObjectC++實現(xiàn)牌废,因此需要您保證您工程中至少有一個.mm后綴的源文件(您可以將任意一個.m后綴的文件改名為.mm)咽白,或者在工程屬性中指定編譯方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As鸟缕,并將其設置為"Objective-C++"
  • 如果您只在Xib文件中使用了BMKMapView晶框,沒有在代碼中使用BMKMapView,編譯器在鏈接時不會鏈接對應符號懂从,需要在工程屬性中顯式設定:在Xcode的Project -> Edit Active Target -> Build Setting -> Other Linker Flags中添加-ObjC
  • 授權Key的申請:新授段、舊Key之間不可通用
  • 自v3.2.0起,百度地圖iOS SDK全面支持HTTPS番甩,需要廣大開發(fā)者導入第三方openssl靜態(tài)庫:libssl.a和libcrypto.a(SDK打好的包存放于thirdlib目錄下)
    添加方法:在 TARGETS->Build Phases-> Link Binary With Libaries中點擊“+”按鈕侵贵,在彈出的窗口中點擊“Add Other”按鈕,選擇libssl.a和libcrypto.a添加到工程中 缘薛。
  • 如果在iOS9中使用了調起百度地圖客戶端功能窍育,必須在"Info.plist"中進行如下配置,否則不能調起百度地圖客戶端宴胧。
    <key>LSApplicationQueriesSchemes</key>
    <array>
    <string>baidumap</string>
    </array>
  • 自iOS SDK v2.5.0起漱抓,為了對iOS8的定位能力做兼容,做了相應的修改恕齐,開發(fā)者在使用過程中注意事項如下:
    需要在info.plist里添加(以下二選一辽旋,兩個都添加默認使用使用第一個):
    NSLocationWhenInUseUsageDescription ,允許在前臺使用時獲取GPS的描述
    NSLocationAlwaysUsageDescription ,允許永久使用GPS的描述
  • 在使用Xcode6進行SDK開發(fā)過程中补胚,需要在info.plist中添加:Bundle display name 码耐,且其值不能為空(Xcode6新建的項目沒有此配置,若沒有會造成manager start failed)

三:手動配置.framework形式開發(fā)包

  • 導入下載好的SDK

  • 添加額外需要的framework
    CoreLocation.framework和QuartzCore.framework溶其、 OpenGLES.framework骚腥、 SystemConfiguration.framework 、
    CoreGraphics.framework瓶逃、Security.framework束铭、 libsqlite3.0.tbd(xcode7以前為 libsqlite3.0.dylib)、
    CoreTelephony.framework 厢绝、libstdc++.6.0.9.tbd(xcode7以前為libstdc++.6.0.9.dylib)契沫。
    (注:后面三個系統(tǒng)庫為v2.9.0新增的系統(tǒng)庫,使用v2.9.0及以上版本的地圖SDK昔汉,務必增加導入這3個系統(tǒng)庫懈万。)
    添加方式: 在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加這幾個系統(tǒng)庫即可靶病。

  • 引入頭文件(按需引入即可)
    #import <BaiduMapAPI_Base/BMKBaseComponent.h> //引入base相關所有的頭文件
    #import <BaiduMapAPI_Map/BMKMapComponent.h> //引入地圖功能所有的頭文件
    #import <BaiduMapAPI_Search/BMKSearchComponent.h> //引入檢索功能所有的頭文件
    #import <BaiduMapAPI_Cloud/BMKCloudSearchComponent.h> //引入云檢索功能所有的頭文件
    #import <BaiduMapAPI_Location/BMKLocationComponent.h> //引入定位功能所有的頭文件
    #import <BaiduMapAPI_Utils/BMKUtilsComponent.h> //引入計算工具所有的頭文件
    #import <BaiduMapAPI_Radar/BMKRadarComponent.h> //引入周邊雷達功能所有的頭文件
    #import <BaiduMapAPI_Map/BMKMapView.h> //只引入所需的單個頭文件

四:可以開始開發(fā)了会通。。娄周。

1 > 在AppDelegate里面初始化BMKMapManager
mapManager = [[BMKMapManager alloc] init];
BOOL ret = [mapManager start:@"在此處輸入您的授權Key"  generalDelegate:nil];

if (!ret) {
    
    NSLog(@"manager start failed");
}
2 > 創(chuàng)建BMKMapView
  • 在viewDidLoad里面

    //初始化地圖
     _mapView = [[BMKMapView alloc] initWithFrame:CGRectMake(0, 0, mapScreenW, mapScreenH)];
     [self.view addSubview:_mapView];
    
  • 地圖View的Delegate涕侈,此處記得不用的時候需要置nil,否則影響內存的釋放

     -(void)viewWillAppear:(BOOL)animated{
    
         [_mapView viewWillAppear];
    
         _mapView.delegate = self;
     }
    
     -(void)viewDidDisappear:(BOOL)animated{
    
        [_mapView viewWillDisappear];
      
         _mapView.delegate = nil;
     }
    
  • 運行程序可以看到如下界面煤辨,地圖雛形已經(jīng)有了

Simulator Screen Shot 2017年6月23日 下午4.26.19.png

五 :接下來實現(xiàn)地圖的定位功能

1 > 定位顯示類型

目前為止裳涛,BMKMapView的定位模式(userTrackingMode)有4種分別是:

  • BMKUserTrackingModeNone :普通定位模式,顯示我的位置众辨,我的位置圖標和地圖都不會旋轉
  • BMKUserTrackingModeFollow : 定位跟隨模式端三,我的位置始終在地圖中心,我的位置圖標會旋轉泻轰,地圖不會旋轉
  • BMKUserTrackingModeFollowWithHeading : 定位羅盤模式技肩,我的位置始終在地圖中心且轨,我的位置圖標和地圖都會跟著旋轉
  • BMKUserTrackingModeHeading:普通定位+定位羅盤模式浮声,顯示我的位置,我的位置始終在地圖中心旋奢,我的位置圖標會旋轉泳挥,地圖不會旋轉。即在普通定位模式的基礎上顯示方向至朗。
2 > 獲取位置信息
  • 初始化定位

     _locationService = [[BMKLocationService alloc] init];
     //定位服務Delegate,調用startUserLocationService定位成功后屉符,用此Delegate來獲取定位數(shù)據(jù)
     //(在視圖將要消失的方法里置nil)
     _locationService.delegate = self;
     _mapView.showsUserLocation = NO;//先關閉顯示的定位圖層
     _mapView.userTrackingMode = BMKUserTrackingModeNone;//設置定位的狀態(tài)
     _mapView.showsUserLocation = YES;//顯示定位圖層
     [_locationService startUserLocationService];
    
  • 實現(xiàn)定位的代理方法,獲取定位數(shù)據(jù)

    #pragma mark  -- BMKLocationServiceDelegate
    //用戶方向更新后,調用此函數(shù)
    - (void)didUpdateUserHeading:(BMKUserLocation *)userLocation{
    
       NSLog(@"heading is %@",userLocation.heading);
    
       [_mapView updateLocationData:userLocation];
    
    }
    
    //用戶位置更新后矗钟,調用此函數(shù)
    - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{
    
      [_mapView updateLocationData:userLocation];
    
  • 打印的是這樣的經(jīng)緯度數(shù)據(jù)唆香,我們難以明白是具體的哪個地方,所以需要進行地理反編碼


    C8E85017-FA34-45A8-B552-61531C4B0E80.png
3 > 獲取坐標進行地理反編碼
  • 初始化地理編碼主類

    //初始化地理編碼主類吨艇,用來查詢躬它、返回結果信息
    _geocodesearch = [[BMKGeoCodeSearch alloc] init];
    _geocodesearch.delegate = self;
    
  • 在獲取地理坐標位置的代理函數(shù)里面更新

    //用戶位置更新后,調用此函數(shù)
    - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{
    
        [_mapView updateLocationData:userLocation];
    
        NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
    
        //更新當前位置到地圖中間
        _mapView.centerCoordinate = userLocation.location.coordinate;
    
        //地理反編碼
        BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init];
    
        reverseGeocodeSearchOption.reverseGeoPoint = userLocation.location.coordinate;
    
        BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption];
    
        if(flag){
      
              NSLog(@"反geo檢索發(fā)送成功");
      
              [_locationService stopUserLocationService];
      
        }else{
      
          NSLog(@"反geo檢索發(fā)送失敗");
      
         }
    
    }
    
  • 地址反編碼

    #pragma mark 地理反編碼的  --  BMKGeoCodeSearchDelegate
    -(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{
    
      NSLog(@"address:%@----%@",result.addressDetail,result.address);
    
      //addressDetail:     層次化地址信息
    
      //address:    地址名稱
    
      //businessCircle:  商圈名稱
    
      // location:  地址坐標
    
      //  poiList:   地址周邊POI信息东涡,成員類型為BMKPoiInfo
    
    }
    
    //定位失敗
    - (void)didFailToLocateUserWithError:(NSError *)error{
      
            NSLog(@"error:%@",error);
      }
    
  • 定位成功冯吓,截圖如下


    Uploading 2084C3F7-706D-4E73-9E79-7DA7315BD838_075531.png
D52A96B8-C8AF-4BD5-A3AF-E0CEA17E715D.png

六 :接下來實現(xiàn)地圖的三種形式的轉換

1 > 切換為衛(wèi)星地圖
//切換為衛(wèi)星圖  
 [_mapView setMapType:BMKMapTypeSatellite];
IMG_7857.PNG
2 > 空白地圖
//設置地圖為空白類型
_mapView.mapType = BMKMapTypeNone;
3 > 標準地圖
_mapView.mapType = BMKMapTypeStandard;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疮跑,隨后出現(xiàn)的幾起案子组贺,更是在濱河造成了極大的恐慌,老刑警劉巖祖娘,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件失尖,死亡現(xiàn)場離奇詭異,居然都是意外死亡贿条,警方通過查閱死者的電腦和手機雹仿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來整以,“玉大人胧辽,你說我怎么就攤上這事」冢” “怎么了邑商?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長凡蚜。 經(jīng)常有香客問我人断,道長,這世上最難降的妖魔是什么朝蜘? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任恶迈,我火速辦了婚禮,結果婚禮上谱醇,老公的妹妹穿的比我還像新娘暇仲。我一直安慰自己,他們只是感情好副渴,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布奈附。 她就那樣靜靜地躺著,像睡著了一般煮剧。 火紅的嫁衣襯著肌膚如雪斥滤。 梳的紋絲不亂的頭發(fā)上将鸵,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音佑颇,去河邊找鬼顶掉。 笑死,一個胖子當著我的面吹牛挑胸,可吹牛的內容都是我干的一喘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼嗜暴,長吁一口氣:“原來是場噩夢啊……” “哼凸克!你這毒婦竟也來了?” 一聲冷哼從身側響起闷沥,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤萎战,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舆逃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚂维,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年路狮,在試婚紗的時候發(fā)現(xiàn)自己被綠了虫啥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡奄妨,死狀恐怖涂籽,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情砸抛,我是刑警寧澤评雌,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站直焙,受9級特大地震影響景东,放射性物質發(fā)生泄漏。R本人自食惡果不足惜奔誓,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一斤吐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厨喂,春花似錦和措、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抒痒。三九已至幌绍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背傀广。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工颁独, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伪冰。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓誓酒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贮聂。 傳聞我的和親對象是個殘疾皇子靠柑,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內容