- 一.進(jìn)入百度地圖官方(注冊(cè)應(yīng)用)
- 1.1.百度地圖官方
-
1.2.創(chuàng)建應(yīng)用
FBABCE88-01DC-4183-A8D9-1A84DD0A94AA.png 1.3.具體的應(yīng)用填寫
- 1.4.安全碼(也就是百度地圖的安全碼)
二.iOS地圖開(kāi)發(fā)
-
2.1.地圖開(kāi)發(fā)的選擇類型(根據(jù)自己的需求選擇)
下載地圖的有關(guān)things 2.2.相關(guān)下載

三.下面真正的進(jìn)行開(kāi)發(fā)(先實(shí)現(xiàn)地圖的展示)
- 3.1申請(qǐ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 name3.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
的根控制器)
- 3.4.1.初始化BMKMapManager
(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)單的地圖展示 密碼: srbp
四.實(shí)現(xiàn)百度地圖的周邊搜做功能
簡(jiǎn)單的展示:
-
4.1.導(dǎo)入靜態(tài)庫(kù)里面的類
#import <BaiduMapAPI_Search/BMKPoiSearch.h> 倆代理 一個(gè)地圖代理,一個(gè)搜索代理 <BMKMapViewDelegate,BMKPoiSearchDelegate>
-
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ò)
-
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];
處理辦法:
/**
* 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è)喜歡,謝謝!!!