iOS百度地圖簡單使用

本文介紹三種接口:

1.基礎地圖
2.POI檢索
3.定位app

首先是配置環境,有兩種方法,方法在官方教程裏都有,再也不多說

1.使用CocoaPods自動配置【這個方法特別好,由於當你使用CocoaPods配置完以後就能夠直接使用了,簡單到你都不敢相信,我他媽用手動配置,每次都有各類問題,解決起來煩死人,使用CocoaPods配置,可能會報一個錯(linker command failed with exit code 1 (use -v to see invocation)),可是,很好解決,只須要找到Build settings->Linking->Other Linker Flags,添加一個-all_load就能夠了 】異步

2.手動配置【這個方法就是狗屎 bull shit】ide

特別注意:

1 1、若是在iOS9中使用了調起百度地圖客戶端功能,必須在"Info.plist"中進行以下配置,不然不能調起百度地圖客戶端。
2     <key>LSApplicationQueriesSchemes</key>
3     <array>
4         <string>baidumap</string>
5     </array>
6 2、自iOS SDK v2.5.0起,爲了對iOS8的定位能力作兼容,須要在info.plist裏添加(如下二選一,兩個都添加默認使用 NSLocationWhenInUseUsageDescription):
7 NSLocationWhenInUseUsageDescription ,容許在前臺使用時獲取GPS的描述
8 NSLocationAlwaysUsageDescription ,容許永久使用GPS的描述
9 3、在使用Xcode6進行SDK開發過程當中,須要在info.plist中添加:Bundle display name ,且其值不能爲空(Xcode6新建的項目沒有此配置,若沒有會形成manager start fail

配置完成後

在AppDelegate.m文件中添加對BMKMapManager的初始化,並填入申請的受權Key函數

 1 #import "AppDelegate.h"
 2 #import <BaiduMapAPI_Base/BMKMapManager.h>
 3 @interface AppDelegate ()
 4 
 5 @end
 6 
 7 @implementation AppDelegate
 8 
 9 
10 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
11 
12 //建立並初始化一個引擎對象
13     BMKMapManager *manager = [[BMKMapManager alloc] init];
14 //啓動地圖引擎
15     BOOL success =  [manager start:@"zBWLNgRUrTp9CVb5Ez6gZpNebljmYylO" generalDelegate:nil];
16 
17     if (!success) {
18         NSLog(@"失敗");
19     }
20     // Override point for customization after application launch.
21     return YES;
22 }

1.基礎地圖

 1 #import "ViewController.h"
 2 #import <BaiduMapAPI_Map/BMKMapView.h>
 3 @interface ViewController ()<BMKMapViewDelegate>
 4 
 5 @property (nonatomic,strong) BMKMapView *mapView;//地圖視圖
 6 @end
 7 
 8 @implementation ViewController
 9 
10 - (void)viewDidLoad {
11     [super viewDidLoad];
12      //初始化地圖
13     self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
14     self.mapView.delegate =self;
15     //設置地圖的顯示樣式
16     self.mapView.mapType = BMKMapTypeSatellite;//衛星地圖
17 
18     //設定地圖是否打開路況圖層
19     self.mapView.trafficEnabled = YES;
20 
21     //底圖poi標註
22     self.mapView.showMapPoi = NO;
23 
24     //在手機上當前可以使用的級別爲3-21級
25     self.mapView.zoomLevel = 21;
26 
27     //設定地圖View可否支持旋轉
28     self.mapView.rotateEnabled = NO;
29 
30     //設定地圖View可否支持用戶移動地圖
31     self.mapView.scrollEnabled = NO;
32 
33     //添加到view上
34     [self.view addSubview:self.mapView];
35 
36    //還有不少屬性,根據需求查看API
37 }

由於咱們選的樣式是衛星地圖,全部效果以下動畫

2.定位

 1 #import "ViewController.h"
 2 #import <BaiduMapAPI_Map/BMKMapView.h>
 3 #import <BaiduMapAPI_Location/BMKLocationService.h>
 4 @interface ViewController ()<BMKLocationServiceDelegate,BMKMapViewDelegate>
 5 
 6 @property (nonatomic,strong) BMKMapView *mapView;//地圖視圖
 7 @property (nonatomic,strong) BMKLocationService *service;//定位服務
 8 
 9 @end
10 
11 @implementation ViewController
12 
13 
14 - (void)viewDidLoad {
15     [super viewDidLoad];
16 
17      //初始化地圖
18     self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
19     self.mapView.delegate =self;
20 
21     //添加到view上
22     [self.view addSubview:self.mapView];
23 
24     //初始化定位
25     self.service = [[BMKLocationService alloc] init];
26 
27     //設置代理
28     self.service.delegate = self;
29 
30     //開啓定位
31     [self.service startUserLocationService];
32 
33 
34     // Do any additional setup after loading the view, typically from a nib.
35 }
36 
37 #pragma mark -------BMKLocationServiceDelegate 
38 
39 /**
40  *用戶位置更新後,會調用此函數
41  *@param userLocation 新的用戶位置
42  */
43 - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation {
44 
45 
46     //展現定位
47     self.mapView.showsUserLocation = YES;
48 
49     //更新位置數據
50     [self.mapView updateLocationData:userLocation];
51 
52     //獲取用戶的座標
53      self.mapView.centerCoordinate = userLocation.location.coordinate;
54 
55      self.mapView.zoomLevel =18;
56 
57 }

效果以下ui

3.POI檢索

  1 #import "ViewController.h"
  2 #import <BaiduMapAPI_Map/BMKMapView.h>
  3 #import <BaiduMapAPI_Location/BMKLocationService.h>
  4 #import <BaiduMapAPI_Search/BMKPoiSearch.h>
  5 #import <BaiduMapAPI_Map/BMKAnnotation.h>
  6 #import <BaiduMapAPI_Map/BMKPointAnnotation.h>
  7 #import <BaiduMapAPI_Map/BMKPinAnnotationView.h>
  8 
  9 
 10 #define kWidth [UIScreen mainScreen].bounds.size.width
 11 @interface ViewController ()<BMKLocationServiceDelegate,BMKPoiSearchDelegate,BMKMapViewDelegate>
 12 
 13 @property (nonatomic,strong) BMKMapView *mapView;//地圖視圖
 14 @property (nonatomic,strong) BMKLocationService *service;//定位服務
 15 @property (nonatomic,strong) BMKPoiSearch *poiSearch;//搜索服務
 16 
 17 @property (nonatomic,strong) NSMutableArray *dataArray;
 18 @end
 19 
 20 @implementation ViewController
 21 
 22 - (NSMutableArray *)dataArray {
 23     if (!_dataArray) {
 24         _dataArray = [NSMutableArray array];
 25 
 26     }
 27     return _dataArray;
 28 
 29 }
 30 - (void)viewDidLoad {
 31     [super viewDidLoad];
 32 
 33     //初始化地圖
 34     self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
 35     self.mapView.delegate =self;
 36 //    //設置地圖的顯示樣式
 37 //    self.mapView.mapType = BMKMapTypeSatellite;//衛星地圖
 38 //    
 39 //    //設置路況
 40 //    self.mapView.trafficEnabled = YES;
 41 //    
 42 //    //底圖poi標註
 43 //    self.mapView.showMapPoi = NO;
 44 //    
 45 //    //在手機上當前可以使用的級別爲3-21級
 46 //    self.mapView.zoomLevel = 21;
 47 //    
 48 //    //旋轉
 49 //    self.mapView.rotateEnabled = NO;
 50 //    
 51 //    //拖拽
 52 //    self.mapView.scrollEnabled = NO;
 53 //    
 54 
 55     [self.view addSubview:self.mapView];
 56 
 57     //初始化定位
 58     self.service = [[BMKLocationService alloc] init];
 59 
 60     //設置代理
 61     self.service.delegate = self;
 62 
 63     //開啓定位
 64     [self.service startUserLocationService];
 65 
 66 
 67     // Do any additional setup after loading the view, typically from a nib.
 68 }
 69 
 70 #pragma mark -------BMKLocationServiceDelegate 
 71 
 72 
 73 /**
 74  *用戶位置更新後,會調用此函數
 75  *@param userLocation 新的用戶位置
 76  */
 77 - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation {
 78 
 79 
 80     //展現定位
 81     self.mapView.showsUserLocation = YES;
 82 
 83     //更新位置數據
 84     [self.mapView updateLocationData:userLocation];
 85 
 86     //獲取用戶的座標
 87      self.mapView.centerCoordinate = userLocation.location.coordinate;
 88 
 89      self.mapView.zoomLevel =18;
 90 
 91 
 92 
 93     //初始化搜索
 94     self.poiSearch =[[BMKPoiSearch alloc] init];
 95 
 96 
 97     self.poiSearch.delegate = self;
 98 
 99 
100 
101     //初始化一個周邊雲檢索對象
102     BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc] init];
103 
104     //索引 默認爲0
105     option.pageIndex = 0;
106 
107     //頁數默認爲10
108     option.pageCapacity = 50;
109 
110     //搜索半徑
111     option.radius = 200;
112 
113     //檢索的中心點,經緯度
114     option.location = userLocation.location.coordinate;
115 
116     //搜索的關鍵字
117     option.keyword = @"小吃";
118 
119 
120 
121      //根據中心點、半徑和檢索詞發起周邊檢索
122     BOOL flag = [self.poiSearch poiSearchNearBy:option];
123     if (flag) {
124         NSLog(@"搜索成功");
125         //關閉定位
126         [self.service stopUserLocationService];
127     }
128     else {
129 
130         NSLog(@"搜索失敗");
131     }
132 
133 }
134 
135 
136 #pragma mark -------BMKPoiSearchDelegate
137 /**
138  *返回POI搜索結果
139  *@param searcher 搜索對象
140  *@param poiResult 搜索結果列表
141  *@param errorCode 錯誤號,@see BMKSearchErrorCode
142  */
143 - (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode {
144 
145      //若搜索成功
146     if (errorCode ==BMK_SEARCH_NO_ERROR) {
147 
148         //POI信息類
149         //poi列表
150         for (BMKPoiInfo *info in poiResult.poiInfoList) {
151 
152             [self.dataArray addObject:info];
153 
154             //初始化一個點的註釋 //只有三個屬性
155             BMKPointAnnotation *annotoation = [[BMKPointAnnotation alloc] init];
156 
157             //座標
158             annotoation.coordinate = info.pt;
159 
160             //title
161             annotoation.title = info.name;
162 
163             //子標題
164             annotoation.subtitle = info.address;
165 
166             //將標註添加到地圖上
167             [self.mapView addAnnotation:annotoation];
168         }
169     }
170 
171 
172 }
173 
174 /**
175  *返回POI詳情搜索結果
176  *@param searcher 搜索對象
177  *@param poiDetailResult 詳情搜索結果
178  *@param errorCode 錯誤號,@see BMKSearchErrorCode
179  */
180 - (void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode {
181 
182     NSLog(@"%@",poiDetailResult.name);
183 
184 }
185 
186 
187 #pragma mark -------------BMKMapViewDelegate
188 
189 /**
190  *根據anntation生成對應的View
191  *@param mapView 地圖View
192  *@param annotation 指定的標註
193  *@return 生成的標註View
194  */
195 - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation {
196 
197     //若是是註釋點
198     if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
199 
200         //根據註釋點,建立並初始化註釋點視圖
201         BMKPinAnnotationView  *newAnnotation = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"an"];
202 
203         //設置大頭針的顏色
204         newAnnotation.pinColor = BMKPinAnnotationColorRed;
205 
206         //設置動畫
207         newAnnotation.animatesDrop = YES;
208 
209         return newAnnotation;
210 
211     }
212 
213     return nil;
214 }
215 /**
216  *當選中一個annotation views時,調用此接口
217  *@param mapView 地圖View
218  *@param views 選中的annotation views
219  */
220 - (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view {
221 
222     //poi詳情檢索信息類
223     BMKPoiDetailSearchOption *option = [[BMKPoiDetailSearchOption alloc] init];
224 
225 
226     BMKPoiInfo *info = self.dataArray.firstObject;
227 
228     //poi的uid,從poi檢索返回的BMKPoiResult結構中獲取
229     option.poiUid = info.uid;
230 
231     /**
232      *根據poi uid 發起poi詳情檢索
233      *異步函數,返回結果在BMKPoiSearchDelegate的onGetPoiDetailResult通知
234      *@param option poi詳情檢索參數類(BMKPoiDetailSearchOption)
235      *@return 成功返回YES,不然返回NO
236      */
237     BOOL flag = [self.poiSearch poiDetailSearch:option];
238 
239     if (flag) {
240         NSLog(@"檢索成功");
241     }
242     else {
243 
244         NSLog(@"檢索失敗");
245     }
246 
247 }

運行效果以下atom

注意:模擬器是有不少問題的,若是定位不了什麼的,都是正常的spa

相關文章
相關標籤/搜索