1、集成百度地圖(傻瓜教程,以網站說明文檔爲準,此處羅列幾項主要步驟)php
一、登陸 http://lbsyun.baidu.com 百度地圖開發者平臺,獲取SDK和集成文檔。ios
二、百度地圖能夠提供的一些服務api
(1)地圖:提供地圖展現和地圖操做功能;緩存
(2)POI檢索:支持周邊檢索、區域檢索和城市內興趣點檢索; app
(3)地理編碼:提供經緯度和地址信息相互轉化的功能接口;ide
(4)線路規劃:支持公交、駕車、步行、騎行,四種方式的線路規劃;網站
(5)覆蓋物圖層:支持在地圖上添加覆蓋物(標註、幾何圖形、熱力圖、地形圖圖層等),展現更豐富的LBS信息;ui
(6)定位:獲取當前位置信息,並在地圖上展現(支持普通、跟隨、羅盤三種模式);編碼
(7)離線地圖:使用離線地圖可節省用戶流量,提供更好的地圖展現效果;atom
(8)調啓百度地圖:利用SDK接口,直接在本地打開百度地圖客戶端或WebApp,實現地圖功能;
(9)周邊雷達:利用周邊雷達功能,開發者可在App內低成本、快速實現查找周邊使用相同App的用戶位置的功能;
(10)LBS雲檢索:支持查詢存儲在LBS雲內的自有數據;
(11)瓦片圖層: 支持在地圖上添加自有瓦片數據。
(12)特點功能:提供短串分享、Place詳情檢索、熱力圖等特點功能,幫助開發者搭建功能更增強大的應用;
二、建立應用,得到AppKey (密鑰)
(1)這裏須要以開發者身份得到key
(2)注意和Bundle Identifier的綁定
三、配置集成前的注意事項
(1)嚴格參考文檔!
(2)幾個注意點
<1> iOS9.0以後,要在Info.plist配置ATS
<2> 在Info.plist配置 百度地圖應用的白名單(支持在本身的應用中打開百度地圖)
<3> 管理地圖的生命週期(手動將代理置空)
<4>在Info.plist中添加獲取定位受權的提醒
NSLocationWhenInUseUsageDescription ,容許在前臺使用時獲取GPS的描述
NSLocationAlwaysUsageDescription ,容許永久使用GPS的描述
四、配置開發環境
(1)添加百度的靜態庫(.framework)
(2)導入一大堆的系統庫
(3)添加地圖包(mapapi.bundle資源文件)
(4)引入全部的頭文件
五、初始化地圖
(1)初始化BMKMapManager
(2)建立BMKMapView
六、基礎地圖
(1)參閱文檔!http://lbsyun.baidu.com/index.php?title=iossdk/guide/basicmap
(2)一些功能的瞭解
<1>地圖類型:普通矢量地圖、衛星圖和空白地圖(節省流量)
<2>打開實時路況圖層
<3>熱力地圖
<4>手勢、地圖控制、底標、折線(幾何圖形的遮蓋)
<5>設置地圖顯示範圍
<6> 等等等。。。
2、百度地圖POI檢索
#import "ViewController.h" @interface ViewController ()<BMKMapViewDelegate,BMKPoiSearchDelegate> @property(nonatomic,weak)BMKMapView * mapView; @property(nonatomic,weak)UITextField * tf; @property(nonatomic,strong)BMKPoiSearch * poisearch; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //設置地圖 BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)]; self.mapView = mapView; [self.view addSubview:mapView]; //設置開始查找按鈕和輸入文本框 UIButton * btn = [[UIButton alloc]initWithFrame:CGRectMake(30, 30, 100, 30)]; [btn setTitle:@"開始查找" forState:UIControlStateNormal]; [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; [btn setBackgroundColor:[UIColor orangeColor]]; [self.view addSubview:btn]; UITextField * tf = [[UITextField alloc]initWithFrame:CGRectMake(150, 30, 100, 30)]; self.tf= tf; tf.backgroundColor = [UIColor orangeColor]; [self.view addSubview:tf]; //實例POI檢索化檢索對象,並設置代理 self.poisearch = [[BMKPoiSearch alloc]init]; self.poisearch.delegate = self; } -(void)btnClick :(UIButton *)btn { //檢索參數 BMKCitySearchOption *citySearchOption = [[BMKCitySearchOption alloc]init]; citySearchOption.pageIndex = 0; //當前頁碼 citySearchOption.pageCapacity = 20; //每頁個數 citySearchOption.city= @"北京"; //城市 citySearchOption.keyword = self.tf.text; //關鍵字 酒店 //根據檢索參數,進行檢索,並返回檢索結果的標識 BOOL flag = [_poisearch poiSearchInCity:citySearchOption]; if(flag) { NSLog(@"城市內檢索發送成功"); } else { NSLog(@"城市內檢索發送失敗"); } } #pragma mark implement BMKSearchDelegate - (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult*)result errorCode:(BMKSearchErrorCode)error { // 清除屏幕中全部的annotation NSArray* array = [NSArray arrayWithArray:_mapView.annotations]; [_mapView removeAnnotations:array]; //正確 if (error == BMK_SEARCH_NO_ERROR) { NSMutableArray *annotations = [NSMutableArray array]; //遍歷返回的查詢結果 for (int i = 0; i < result.poiInfoList.count; i++) { BMKPoiInfo* poi = [result.poiInfoList objectAtIndex:i]; BMKPointAnnotation* item = [[BMKPointAnnotation alloc]init]; item.coordinate = poi.pt; item.title = poi.name; [annotations addObject:item]; } //給地圖添加大頭針模型 [_mapView addAnnotations:annotations]; [_mapView showAnnotations:annotations animated:YES]; } else if (error == BMK_SEARCH_AMBIGUOUS_ROURE_ADDR){ NSLog(@"起始點有歧義"); } else { // 各類狀況的判斷。。。 } } #pragma mark implement BMKMapViewDelegate /** *根據anntation生成對應的View *@param mapView 地圖View *@param annotation 指定的標註 *@return 生成的標註View */ - (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id <BMKAnnotation>)annotation { // 生成重用標示identifier NSString *AnnotationViewID = @"xidanMark"; // 檢查是否有重用的緩存 BMKAnnotationView* annotationView = [view dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID]; // 緩存沒有,本身構造一個,通常首次添加annotation代碼會運行到此處 if (annotationView == nil) { annotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID]; ((BMKPinAnnotationView*)annotationView).pinColor = BMKPinAnnotationColorRed; // 設置重天上掉下的效果(annotation) ((BMKPinAnnotationView*)annotationView).animatesDrop = YES; } // 設置位置 annotationView.centerOffset = CGPointMake(0, -(annotationView.frame.size.height * 0.5)); annotationView.annotation = annotation; // 單擊彈出泡泡,彈出泡泡前提annotation必須實現title屬性 annotationView.canShowCallout = YES; // 設置是否能夠拖拽 annotationView.draggable = NO; return annotationView; } -(void)viewWillAppear:(BOOL)animated { [_mapView viewWillAppear]; _mapView.delegate = self; // 此處記得不用的時候須要置nil,不然影響內存的釋放 } -(void)viewWillDisappear:(BOOL)animated { [_mapView viewWillDisappear]; _mapView.delegate = nil; // 不用時,置nil } @end