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 #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 }
由於咱們選的樣式是衛星地圖,全部效果以下動畫
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