iOS - 百度地圖二(添加大頭針)

在上一章的地圖基礎(chǔ)上,添加檢索功能

1 > 首先聲明一個(gè)檢索類和存儲檢索數(shù)據(jù)的數(shù)組:
@property (nonatomic, strong) BMKPoiSearch       * search;

@property (nonatomic, strong) NSMutableArray     * searchDataArray;

-(NSMutableArray *)searchDataArray{

if (!_searchDataArray) {
    
    _searchDataArray = [[NSMutableArray alloc] init];
}

  return  _searchDataArray;
}
2 > 在didUpdateBMKUserLocation用戶位置更新的代理函數(shù)里面(設(shè)置搜索內(nèi)容,參數(shù)等等):
 - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{

  [_mapView updateLocationData:userLocation];

  NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);

  //更新當(dāng)前位置到地圖中間
  _mapView.centerCoordinate = userLocation.location.coordinate;

  //地理反編碼
  BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init];

  reverseGeocodeSearchOption.reverseGeoPoint = userLocation.location.coordinate;

  BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption];

  if(flag){
    
      NSLog(@"反geo檢索發(fā)送成功");
    
      [_locationService stopUserLocationService];
    
  }else{
    
      NSLog(@"反geo檢索發(fā)送失敗");
    
  }


  //獲取用戶坐標(biāo)
  _mapView.centerCoordinate = userLocation.location.coordinate;
  //初始化搜索
  _search = [[BMKPoiSearch alloc] init];
  _search.delegate = self;
  //初始化一個(gè)周邊檢索對象
  BMKNearbySearchOption * option = [[BMKNearbySearchOption alloc] init];
  //分頁索引,可選,默認(rèn)為0
  option.pageIndex = 0;
  //分頁數(shù)量,可選,默認(rèn)為10,最多為50
  option.pageCapacity = 30;
  //檢索的中心點(diǎn),經(jīng)緯度
  option.location = userLocation.location.coordinate;
  //搜索關(guān)鍵字
  option.keyword = @"餐館";
  //周邊檢索半徑
  option.radius = 500;

  //根據(jù)中心店、半徑、檢索詞等發(fā)起周邊檢索
  BOOL searchFlag = [_search poiSearchNearBy:option];
     if (searchFlag) {
    
          NSLog(@"搜索成功");
          //關(guān)閉檢索
        [_locationService stopUserLocationService];

      }else {
    
          NSLog(@"搜索失敗");
    }

}
3 > 在搜索成功之后,會調(diào)用以下代理函數(shù):
#pragma mark -- BMKPoiSearchDelegate
/**
 * 返回POI搜索結(jié)果
 * @param searcher 搜索對象
 * @param poiResult 搜索結(jié)果列表
 * @param errorCode 錯(cuò)誤號,@see BMKSearchErrorCode
 */
-(void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode{

    //檢索成功
    if (errorCode == BMK_SEARCH_NO_ERROR) {
    
        //POI信息類(Point of Interest)
        for (BMKPoiInfo * info in poiResult.poiInfoList) {
        
            [self.searchDataArray addObject:info];
        
          //             NSLog(@"info.name = %@",info.name);
            //初始化一個(gè)點(diǎn)的注釋
          BMKPointAnnotation * annotoation = [[BMKPointAnnotation alloc] init];
        
          //坐標(biāo)
          annotoation.coordinate = info.pt;
        
          //title
          annotoation.title = info.name;
        
          //子標(biāo)題
          annotoation.subtitle = info.address;
        
          //將標(biāo)注加在地圖上
          [_mapView addAnnotation:annotoation];
        
      }
    }else{
    
        NSLog(@"檢索失敗");
    }
}

/**
 *返回POI詳情搜索結(jié)果
 *@param searcher 搜索對象
 *@param poiDetailResult 詳情搜索結(jié)果
 *@param errorCode 錯(cuò)誤號,@see BMKSearchErrorCode
 */
- (void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode {

    NSLog(@"%@",poiDetailResult.name);

}


#pragma mark -- BMKMapViewDelegate
/**
 *根據(jù)anntation生成對應(yīng)的View
 *@param mapView 地圖View
 *@param annotation 指定的標(biāo)注
 *@return 生成的標(biāo)注View
 */
-(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation{

      //如果是注釋點(diǎn)
    if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
    
        //根據(jù)注釋點(diǎn),創(chuàng)建并初始化注釋點(diǎn)視圖
        BMKPinAnnotationView  *newAnnotation = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"an"];
    
        //設(shè)置大頭針顏色
        newAnnotation.pinColor = BMKPinAnnotationColorPurple;
    
        //設(shè)置動畫
        newAnnotation.animatesDrop = YES;
      
        return newAnnotation;
    }

    return nil;

}

 /**
 *當(dāng)選中一個(gè)annotation views(某個(gè)大頭針)時(shí),調(diào)用此接口
 *@param mapView 地圖View
 *@param views 選中的annotation views
 */
- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view {

    //poi詳情檢索信息類
    BMKPoiDetailSearchOption *option = [[BMKPoiDetailSearchOption alloc] init];

    BMKPoiInfo *info = self.searchDataArray.firstObject;

    //poi的uid,從poi檢索返回的BMKPoiResult結(jié)構(gòu)中獲取
    option.poiUid = info.uid;

 /**
 *根據(jù)poi uid 發(fā)起poi詳情檢索
 *異步函數(shù),返回結(jié)果在BMKPoiSearchDelegate的onGetPoiDetailResult通知
 *@param option poi詳情檢索參數(shù)類(BMKPoiDetailSearchOption)
 *@return 成功返回YES,否則返回NO
 */
BOOL flag = [self.search poiDetailSearch:option];

    if (flag) {
        NSLog(@"檢索成功");

   } else {
    
        NSLog(@"檢索失敗");
    }
}
4 > 以上設(shè)置,就可以了,運(yùn)行得帶如下圖結(jié)果:
IMG_7882.PNG
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容