iOS - 百度地图二(添加大头针)

在上一章的地图基础上,添加检索功能

1 > 首先声明一个检索类和存储检索数据的数组:
@property (nonatomic, strong) BMKPoiSearch       * search;

@property (nonatomic, strong) NSMutableArray     * searchDataArray;

-(NSMutableArray *)searchDataArray{

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

  return  _searchDataArray;
}
2 > 在didUpdateBMKUserLocation用户位置更新的代理函数里面(设置搜索内容,参数等等):
 - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{

  [_mapView updateLocationData:userLocation];

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

  //更新当前位置到地图中间
  _mapView.centerCoordinate = userLocation.location.coordinate;

  //地理反编码
  BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init];

  reverseGeocodeSearchOption.reverseGeoPoint = userLocation.location.coordinate;

  BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption];

  if(flag){
    
      NSLog(@"反geo检索发送成功");
    
      [_locationService stopUserLocationService];
    
  }else{
    
      NSLog(@"反geo检索发送失败");
    
  }


  //获取用户坐标
  _mapView.centerCoordinate = userLocation.location.coordinate;
  //初始化搜索
  _search = [[BMKPoiSearch alloc] init];
  _search.delegate = self;
  //初始化一个周边检索对象
  BMKNearbySearchOption * option = [[BMKNearbySearchOption alloc] init];
  //分页索引,可选,默认为0
  option.pageIndex = 0;
  //分页数量,可选,默认为10,最多为50
  option.pageCapacity = 30;
  //检索的中心点,经纬度
  option.location = userLocation.location.coordinate;
  //搜索关键字
  option.keyword = @"餐馆";
  //周边检索半径
  option.radius = 500;

  //根据中心店、半径、检索词等发起周边检索
  BOOL searchFlag = [_search poiSearchNearBy:option];
     if (searchFlag) {
    
          NSLog(@"搜索成功");
          //关闭检索
        [_locationService stopUserLocationService];

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

}
3 > 在搜索成功之后,会调用以下代理函数:
#pragma mark -- BMKPoiSearchDelegate
/**
 * 返回POI搜索结果
 * @param searcher 搜索对象
 * @param poiResult 搜索结果列表
 * @param errorCode 错误号,@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);
            //初始化一个点的注释
          BMKPointAnnotation * annotoation = [[BMKPointAnnotation alloc] init];
        
          //坐标
          annotoation.coordinate = info.pt;
        
          //title
          annotoation.title = info.name;
        
          //子标题
          annotoation.subtitle = info.address;
        
          //将标注加在地图上
          [_mapView addAnnotation:annotoation];
        
      }
    }else{
    
        NSLog(@"检索失败");
    }
}

/**
 *返回POI详情搜索结果
 *@param searcher 搜索对象
 *@param poiDetailResult 详情搜索结果
 *@param errorCode 错误号,@see BMKSearchErrorCode
 */
- (void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode {

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

}


#pragma mark -- BMKMapViewDelegate
/**
 *根据anntation生成对应的View
 *@param mapView 地图View
 *@param annotation 指定的标注
 *@return 生成的标注View
 */
-(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation{

      //如果是注释点
    if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
    
        //根据注释点,创建并初始化注释点视图
        BMKPinAnnotationView  *newAnnotation = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"an"];
    
        //设置大头针颜色
        newAnnotation.pinColor = BMKPinAnnotationColorPurple;
    
        //设置动画
        newAnnotation.animatesDrop = YES;
      
        return newAnnotation;
    }

    return nil;

}

 /**
 *当选中一个annotation views(某个大头针)时,调用此接口
 *@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结构中获取
    option.poiUid = info.uid;

 /**
 *根据poi uid 发起poi详情检索
 *异步函数,返回结果在BMKPoiSearchDelegate的onGetPoiDetailResult通知
 *@param option poi详情检索参数类(BMKPoiDetailSearchOption)
 *@return 成功返回YES,否则返回NO
 */
BOOL flag = [self.search poiDetailSearch:option];

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

   } else {
    
        NSLog(@"检索失败");
    }
}
4 > 以上设置,就可以了,运行得带如下图结果:
IMG_7882.PNG
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,932评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,554评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,894评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,442评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,347评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,899评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,325评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,980评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,196评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,163评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,085评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,826评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,389评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,501评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,753评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,171评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,616评论 2 339

推荐阅读更多精彩内容