iOS百度地圖簡單使用

百度地圖 iOS SDK是一套基于iOS 5.0及以上版本設(shè)備的應(yīng)用程序接口,不僅提供展示地圖的基本接口烫止,還提供POI檢索、路徑規(guī)劃戳稽、地圖標(biāo)注馆蠕、離線地圖、定位惊奇、周邊雷達(dá)等豐富的LBS能力 互躬。

今天主要介紹以下接口

1.基礎(chǔ)地圖
2.POI檢索
3.定位

首先配置環(huán)境

1.自動(dòng)配置.framework形式開發(fā)包(使用CocoaPods)<推薦>
2.手動(dòng)配置.framework形式開發(fā)包

特別注意:

(API里有很多注意點(diǎn),大家可以具體去看.但是我說的后兩點(diǎn)少其中一個(gè)都會(huì)失敗,第一點(diǎn)是有需求的話,必須加上)
1、如果在iOS9中使用了調(diào)起百度地圖客戶端功能颂郎,必須在"Info.plist"中進(jìn)行如下配置吼渡,否則不能調(diào)起百度地圖客戶端。
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>baidumap</string>
    </array>
2乓序、自iOS SDK v2.5.0起寺酪,為了對(duì)iOS8的定位能力做兼容,需要在info.plist里添加(以下二選一替劈,兩個(gè)都添加默認(rèn)使用 NSLocationWhenInUseUsageDescription):
NSLocationWhenInUseUsageDescription 寄雀,允許在前臺(tái)使用時(shí)獲取GPS的描述
NSLocationAlwaysUsageDescription ,允許永久使用GPS的描述
3陨献、在使用Xcode6進(jìn)行SDK開發(fā)過程中盒犹,需要在info.plist中添加:Bundle display name ,且其值不能為空(Xcode6新建的項(xiàng)目沒有此配置眨业,若沒有會(huì)造成manager start fail

配置完成后

AppDelegate.m文件中添加對(duì)BMKMapManager的初始化急膀,并填入申請(qǐng)的授權(quán)Key

#import "AppDelegate.h"
#import <BaiduMapAPI_Base/BMKMapManager.h>
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
//創(chuàng)建并初始化一個(gè)引擎對(duì)象
    BMKMapManager *manager = [[BMKMapManager alloc] init];
//啟動(dòng)地圖引擎
    BOOL success =  [manager start:@"zBWLNgRUrTp9CVb5Ez6gZpNebljmYylO" generalDelegate:nil];
    
    if (!success) {
        NSLog(@"失敗");
    }
    // Override point for customization after application launch.
    return YES;
}

1.基礎(chǔ)地圖

#import "ViewController.h"
#import <BaiduMapAPI_Map/BMKMapView.h>
@interface ViewController ()<BMKMapViewDelegate>

@property (nonatomic,strong) BMKMapView *mapView;//地圖視圖
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
     //初始化地圖
    self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
    self.mapView.delegate =self;
    //設(shè)置地圖的顯示樣式
    self.mapView.mapType = BMKMapTypeSatellite;//衛(wèi)星地圖
    
    //設(shè)定地圖是否打開路況圖層
    self.mapView.trafficEnabled = YES;
    
    //底圖poi標(biāo)注
    self.mapView.showMapPoi = NO;
    
    //在手機(jī)上當(dāng)前可使用的級(jí)別為3-21級(jí)
    self.mapView.zoomLevel = 21;
    
    //設(shè)定地圖View能否支持旋轉(zhuǎn)
    self.mapView.rotateEnabled = NO;
    
    //設(shè)定地圖View能否支持用戶移動(dòng)地圖
    self.mapView.scrollEnabled = NO;
    
    //添加到view上
    [self.view addSubview:self.mapView];

   //還有很多屬性,根據(jù)需求查看API
}

運(yùn)行效果入下;


基本.jpg

2.定位

#import "ViewController.h"
#import <BaiduMapAPI_Map/BMKMapView.h>
#import <BaiduMapAPI_Location/BMKLocationService.h>
@interface ViewController ()<BMKLocationServiceDelegate,BMKMapViewDelegate>

@property (nonatomic,strong) BMKMapView *mapView;//地圖視圖
@property (nonatomic,strong) BMKLocationService *service;//定位服務(wù)

@end

@implementation ViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    
     //初始化地圖
    self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
    self.mapView.delegate =self;

    //添加到view上
    [self.view addSubview:self.mapView];
    
    //初始化定位
    self.service = [[BMKLocationService alloc] init];
    
    //設(shè)置代理
    self.service.delegate = self;
    
    //開啟定位
    [self.service startUserLocationService];
    
   
    // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark -------BMKLocationServiceDelegate 

/**
 *用戶位置更新后,會(huì)調(diào)用此函數(shù)
 *@param userLocation 新的用戶位置
 */
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation {

    
    //展示定位
    self.mapView.showsUserLocation = YES;
    
    //更新位置數(shù)據(jù)
    [self.mapView updateLocationData:userLocation];
    
    //獲取用戶的坐標(biāo)
     self.mapView.centerCoordinate = userLocation.location.coordinate;

     self.mapView.zoomLevel =18;

}

運(yùn)行結(jié)果

定位.jpg

POI檢索

#import "ViewController.h"
#import <BaiduMapAPI_Map/BMKMapView.h>
#import <BaiduMapAPI_Location/BMKLocationService.h>
#import <BaiduMapAPI_Search/BMKPoiSearch.h>
#import <BaiduMapAPI_Map/BMKAnnotation.h>
#import <BaiduMapAPI_Map/BMKPointAnnotation.h>
#import <BaiduMapAPI_Map/BMKPinAnnotationView.h>


#define kWidth [UIScreen mainScreen].bounds.size.width
@interface ViewController ()<BMKLocationServiceDelegate,BMKPoiSearchDelegate,BMKMapViewDelegate>

@property (nonatomic,strong) BMKMapView *mapView;//地圖視圖
@property (nonatomic,strong) BMKLocationService *service;//定位服務(wù)
@property (nonatomic,strong) BMKPoiSearch *poiSearch;//搜索服務(wù)

@property (nonatomic,strong) NSMutableArray *dataArray;
@end

@implementation ViewController

- (NSMutableArray *)dataArray {
    if (!_dataArray) {
        _dataArray = [NSMutableArray array];
        
    }
    return _dataArray;

}
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //初始化地圖
    self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
    self.mapView.delegate =self;
//    //設(shè)置地圖的顯示樣式
//    self.mapView.mapType = BMKMapTypeSatellite;//衛(wèi)星地圖
//    
//    //設(shè)置路況
//    self.mapView.trafficEnabled = YES;
//    
//    //底圖poi標(biāo)注
//    self.mapView.showMapPoi = NO;
//    
//    //在手機(jī)上當(dāng)前可使用的級(jí)別為3-21級(jí)
//    self.mapView.zoomLevel = 21;
//    
//    //旋轉(zhuǎn)
//    self.mapView.rotateEnabled = NO;
//    
//    //拖拽
//    self.mapView.scrollEnabled = NO;
//    
    
    [self.view addSubview:self.mapView];
    
    //初始化定位
    self.service = [[BMKLocationService alloc] init];
    
    //設(shè)置代理
    self.service.delegate = self;
    
    //開啟定位
    [self.service startUserLocationService];
    
   
    // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark -------BMKLocationServiceDelegate 


/**
 *用戶位置更新后龄捡,會(huì)調(diào)用此函數(shù)
 *@param userLocation 新的用戶位置
 */
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation {

    
    //展示定位
    self.mapView.showsUserLocation = YES;
    
    //更新位置數(shù)據(jù)
    [self.mapView updateLocationData:userLocation];
    
    //獲取用戶的坐標(biāo)
     self.mapView.centerCoordinate = userLocation.location.coordinate;

     self.mapView.zoomLevel =18;
    
    
    
    //初始化搜索
    self.poiSearch =[[BMKPoiSearch alloc] init];
    
    
    self.poiSearch.delegate = self;
    
    
    
    //初始化一個(gè)周邊云檢索對(duì)象
    BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc] init];
    
    //索引 默認(rèn)為0
    option.pageIndex = 0;
    
    //頁數(shù)默認(rèn)為10
    option.pageCapacity = 50;
    
    //搜索半徑
    option.radius = 200;
    
    //檢索的中心點(diǎn)卓嫂,經(jīng)緯度
    option.location = userLocation.location.coordinate;
    
    //搜索的關(guān)鍵字
    option.keyword = @"小吃";
    
    
 
     //根據(jù)中心點(diǎn)、半徑和檢索詞發(fā)起周邊檢索
    BOOL flag = [self.poiSearch poiSearchNearBy:option];
    if (flag) {
        NSLog(@"搜索成功");
        //關(guān)閉定位
        [self.service stopUserLocationService];
    }
    else {
    
        NSLog(@"搜索失敗");
    }

}


#pragma mark -------BMKPoiSearchDelegate
/**
 *返回POI搜索結(jié)果
 *@param searcher 搜索對(duì)象
 *@param poiResult 搜索結(jié)果列表
 *@param errorCode 錯(cuò)誤號(hào)墅茉,@see BMKSearchErrorCode
 */
- (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode {

     //若搜索成功
    if (errorCode ==BMK_SEARCH_NO_ERROR) {
        
        //POI信息類
        //poi列表
        for (BMKPoiInfo *info in poiResult.poiInfoList) {
            
            [self.dataArray addObject:info];
            
            //初始化一個(gè)點(diǎn)的注釋 //只有三個(gè)屬性
            BMKPointAnnotation *annotoation = [[BMKPointAnnotation alloc] init];
            
            //坐標(biāo)
            annotoation.coordinate = info.pt;
            
            //title
            annotoation.title = info.name;
            
            //子標(biāo)題
            annotoation.subtitle = info.address;
            
            //將標(biāo)注添加到地圖上
            [self.mapView addAnnotation:annotoation];
        }
    }


}

/**
 *返回POI詳情搜索結(jié)果
 *@param searcher 搜索對(duì)象
 *@param poiDetailResult 詳情搜索結(jié)果
 *@param errorCode 錯(cuò)誤號(hào)命黔,@see BMKSearchErrorCode
 */
- (void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode {
    
    NSLog(@"%@",poiDetailResult.name);
    
}


#pragma mark -------------BMKMapViewDelegate

/**
 *根據(jù)anntation生成對(duì)應(yīng)的View
 *@param mapView 地圖View
 *@param annotation 指定的標(biāo)注
 *@return 生成的標(biāo)注View
 */
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation {
    
    //如果是注釋點(diǎn)
    if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
        
        //根據(jù)注釋點(diǎn),創(chuàng)建并初始化注釋點(diǎn)視圖
        BMKPinAnnotationView  *newAnnotation = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"an"];
        
        //設(shè)置大頭針的顏色
        newAnnotation.pinColor = BMKPinAnnotationColorRed;
        
        //設(shè)置動(dòng)畫
        newAnnotation.animatesDrop = YES;
        
        return newAnnotation;
        
    }

    return nil;
}
/**
 *當(dāng)選中一個(gè)annotation views時(shí)呜呐,調(diào)用此接口
 *@param mapView 地圖View
 *@param views 選中的annotation views
 */
- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view {
    
    //poi詳情檢索信息類
    BMKPoiDetailSearchOption *option = [[BMKPoiDetailSearchOption alloc] init];

    
    BMKPoiInfo *info = self.dataArray.firstObject;
    
    //poi的uid,從poi檢索返回的BMKPoiResult結(jié)構(gòu)中獲取
    option.poiUid = info.uid;
    
    /**
     *根據(jù)poi uid 發(fā)起poi詳情檢索
     *異步函數(shù)悍募,返回結(jié)果在BMKPoiSearchDelegate的onGetPoiDetailResult通知
     *@param option poi詳情檢索參數(shù)類(BMKPoiDetailSearchOption)
     *@return 成功返回YES蘑辑,否則返回NO
     */
    BOOL flag = [self.poiSearch poiDetailSearch:option];
    
    if (flag) {
        NSLog(@"檢索成功");
    }
    else {
    
        NSLog(@"檢索失敗");
    }
    


}

運(yùn)行結(jié)果

搜索.jpg

總結(jié)

百度地圖的功能很強(qiáng)大,還有很多檢索,都沒有寫.大家又興趣可以鉆研下,畢竟第三方的接口文檔相對(duì)比較明了.如有問題,可以留言

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市坠宴,隨后出現(xiàn)的幾起案子洋魂,更是在濱河造成了極大的恐慌,老刑警劉巖喜鼓,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件副砍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡庄岖,警方通過查閱死者的電腦和手機(jī)豁翎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隅忿,“玉大人心剥,你說我怎么就攤上這事”惩” “怎么了优烧?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長链峭。 經(jīng)常有香客問我畦娄,道長,這世上最難降的妖魔是什么弊仪? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任熙卡,我火速辦了婚禮,結(jié)果婚禮上撼短,老公的妹妹穿的比我還像新娘再膳。我一直安慰自己,他們只是感情好曲横,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布喂柒。 她就那樣靜靜地躺著,像睡著了一般禾嫉。 火紅的嫁衣襯著肌膚如雪灾杰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天熙参,我揣著相機(jī)與錄音艳吠,去河邊找鬼。 笑死孽椰,一個(gè)胖子當(dāng)著我的面吹牛昭娩,可吹牛的內(nèi)容都是我干的凛篙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼栏渺,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼呛梆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起磕诊,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤填物,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后霎终,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滞磺,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年莱褒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了击困。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡广凸,死狀恐怖沛励,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情炮障,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布坤候,位于F島的核電站胁赢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏白筹。R本人自食惡果不足惜智末,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望徒河。 院中可真熱鬧系馆,春花似錦、人聲如沸顽照。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽代兵。三九已至尼酿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間植影,已是汗流浹背裳擎。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留思币,地道東北人鹿响。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓羡微,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惶我。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妈倔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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