上一篇講的是地圖的基本使用,和注意事項,這一篇主要講POI檢索。百度地圖SDK提供三種類型的POI檢索:周邊檢索、區域檢索和城市內檢索。下面將以周邊檢索爲例,向你們介紹如何使用檢索服務。git
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.mapView = [[BMKMapView alloc] initWithFrame:CGRectMake(0, 0, kwidth, kheigth)]; [self.mapView setZoomLevel:16]; [self.view addSubview:self.mapView]; // BMKPoiResult //1. 初始化檢索對象 _searcher =[[BMKPoiSearch alloc]init]; _searcher.delegate = self; //2. 發起檢索 --> 拼接參數 BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init]; //分頁索引,可選,默認爲0 option.pageIndex = 0; //分頁數量,可選,默認爲10,最多爲50 option.pageCapacity = 10; option.location = CLLocationCoordinate2DMake(39.915, 116.404); option.keyword = @"停車場"; BOOL flag = [_searcher poiSearchNearBy:option]; if(flag) { NSLog(@"周邊檢索發送成功"); } else { NSLog(@"周邊檢索發送失敗"); } }
檢索結果在代理中github
//實現PoiSearchDeleage處理回調結果 - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error
而後就是基於基本檢索的詳情檢索要在上面一個方法的代理中實現詳情檢索,app
- (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error { if (error == BMK_SEARCH_NO_ERROR) { //在此處理正常結果 //初始化檢索服務 _poisearch = [[BMKPoiSearch alloc] init]; _poisearch.delegate = self; //POI詳情檢索 BMKPoiDetailSearchOption* option = [[BMKPoiDetailSearchOption alloc] init]; for (BMKPoiInfo *poiInfo in poiResultList.poiInfoList) { NSString *uids = poiInfo.uid; option.poiUid = uids; } BOOL flag = [_poisearch poiDetailSearch:option]; if(flag) { //詳情檢索發起成功 NSLog(@"%@",@"詳情檢索發起成功"); } else { //詳情檢索發送失敗 NSLog(@"%@",@"詳情檢索發送失敗"); } // 添加大頭針 / 顯示一個列表給用戶 for (BMKPoiInfo *poiInfo in poiResultList.poiInfoList) { BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init]; annotation.coordinate = poiInfo.pt; annotation.title = poiInfo.name; [self.mapView addAnnotation:annotation]; } } else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){ //當在設置城市未找到結果,但在其餘城市找到結果時,回調建議檢索城市列表 // result.cityList; NSLog(@"起始點有歧義"); } else { NSLog(@"error: %zd",error); NSLog(@"抱歉,未找到結果"); } }
而後在代理方法中獲得詳情檢索結果。ui
-(void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode { if(errorCode == BMK_SEARCH_NO_ERROR){ //在此處理正常結果 NSLog(@"%@",@"在此處理正常結果"); NSLog(@"%@--%@--%@--%@--%f--%d",poiDetailResult.address,poiDetailResult.name,poiDetailResult.tag,poiDetailResult.phone,poiDetailResult.price,poiDetailResult.favoriteNum); } }
還有公交檢索和路線檢索,沒有實際用過在demo中有寫,可是沒有把路線畫出來,只是打印了一些信息在控制檯,而後就是正向地理編碼和反向地理編碼示例以下:編碼
-(void)viewDidLoad { //初始化檢索對象 _searcher =[[BMKGeoCodeSearch alloc]init]; _searcher.delegate = self; BMKGeoCodeSearchOption *geoCodeSearchOption = [[BMKGeoCodeSearchOption alloc]init]; geoCodeSearchOption.city= @"北京市"; geocodeSearchOption.address = @"海淀區上地10街10號"; BOOL flag = [_searcher geoCode:geoCodeSearchOption]; [geoCodeSearchOption release]; if(flag) { NSLog(@"geo檢索發送成功"); } else { NSLog(@"geo檢索發送失敗"); } //發起反向地理編碼檢索 //CLLocationCoordinate2D pt = (CLLocationCoordinate2D){39.915, 116.404}; //BMKReverseGeoCodeOption *reverseGeoCodeSearchOption = [[ //BMKReverseGeoCodeOption alloc]init]; //reverseGeoCodeSearchOption.reverseGeoPoint = pt; //BOOL flag = [_searcher reverseGeoCode:reverseGeoCodeSearchOption]; //[reverseGeoCodeSearchOption release]; //if(flag) //{ // NSLog(@"反geo檢索發送成功"); //} //else //{ // NSLog(@"反geo檢索發送失敗"); //} } //實現Deleage處理回調結果 //接收正向編碼結果 - (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ if (error == BMK_SEARCH_NO_ERROR) { //在此處理正常結果 } else { NSLog(@"抱歉,未找到結果"); } } //接收反向地理編碼結果 //-(void) onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result: //(BMKReverseGeoCodeResult *)result //errorCode:(BMKSearchErrorCode)error{ // if (error == BMK_SEARCH_NO_ERROR) { // 在此處理正常結果 // } // else { // NSLog(@"抱歉,未找到結果"); // } //} //不使用時將delegate設置爲 nil -(void)viewWillDisappear:(BOOL)animated { _searcher.delegate = nil; }
本文GitHub地址https://github.com/zhangkiwi/iOS_SN_BDMap-Test代理