iOS开发--百度地图定位与搜索(附带右滑手势冲突解决方法)

一. 百度地图

项目中使用到了地图的展示, 定位, 大头针, 搜索功能. 比较简单, 只是一个小模块, 直接上代码.

1. 根据自己的需求配置plist文件(根据自己的情况酌情处理)
1.png
2. 导入头文件(我是在pch中引入的)
// 地图
#import <BaiduMapKit/BaiduMapAPI_Map/BMKMapView.h>
// 定位
#import <BaiduMapAPI_Location/BMKLocationService.h>

AppDelegate中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    
    // 要使用百度地图,请先启动BaiduMapManager
    _mapManager = [[BMKMapManager alloc]init];
    // 如果要关注网络及授权验证事件,请设定generalDelegate参数
    BOOL ret = [_mapManager start:@"你创建百度地图项目时获得的key" generalDelegate:nil];
    if (!ret) {
        NSLog(@"manager start failed!");
    }
}

控制器中(VC)

// 大头针
#import <BaiduMapAPI_Map/BMKPointAnnotation.h>
// 搜索
#import <BaiduMapAPI_Search/BMKPoiSearch.h>
- (void)configUI
{
    _mapView = [[BMKMapView alloc] initWithFrame:CGRectMake(0, 0, DEVICE_SCREEN_WIDTH, DEVICE_SCREEN_HEIGHT - DEVICE_NAVIGATION_BAR_HEIGHT - DEVICE_STATUS_BAR_HEIGHT)];
    //以下_mapView为BMKMapView对象
    [self.view addSubview:_mapView];
    //显示定位图层
    _mapView.showsUserLocation = YES;
    //设置定位的状态为跟随定位模式
    _mapView.userTrackingMode = BMKUserTrackingModeHeading;
    _mapView.zoomLevel = 17;
    
    //初始化BMKLocationService
    _locService = [[BMKLocationService alloc]init];
    _locService.delegate = self;
    //启动LocationService
    [_locService startUserLocationService];
}
处理位置坐标更新
//处理位置坐标更新
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
    // 设置地图中心点为当前定位位置
    _mapView.centerCoordinate = userLocation.location.coordinate;
    
    _annotation = [[BMKPointAnnotation alloc]init];
    // 设置大头针位置为当前定位位置
    _annotation.coordinate = userLocation.location.coordinate;
    [_mapView addAnnotation:_annotation];
    // 纬度
    _strlatitude = userLocation.location.coordinate.latitude;
    // 经度
    _strlongitude = userLocation.location.coordinate.longitude;
    
    __weak typeof(self) weakSelf = self;
    //旧址
    CLLocation *currentLocation = userLocation.location;
    CLGeocoder *geoCoder = [[CLGeocoder alloc]init];
    
    //反地理编码
    [geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        if (placemarks.count > 0) {
            CLPlacemark *placeMark = placemarks[0];
            if (!placeMark.locality) {
                [HSAppTool showToastWithText:@"无法定位当前城市"];
            }
            weakSelf.currentCity = placeMark.locality;
            /*看需求定义一个全局变量来接收赋值*/
            NSLog(@"----%@",placeMark.country);//当前国家
            NSLog(@"%@",placeMark.locality);//当前的城市
            NSLog(@"%@",placeMark.subLocality);//当前的位置
            NSLog(@"%@",placeMark.thoroughfare);//当前街道
            NSLog(@"%@",placeMark.name);//具体地址
        }
    }];
    // 停止(实时定位不用停止, 因为我的需求只要定位一次)
    [_locService stopUserLocationService];
}

搜索功能

// textField点击方法(这里我用的是EditingChanged)
- (void)editingSearchTextField:(UITextField *)textField
{
    //初始化搜索对象 ,并设置代理
    _searcher =[[BMKPoiSearch alloc]init];
    _searcher.delegate = self;
    //请求参数类BMKCitySearchOption
    BMKCitySearchOption *citySearchOption = [[BMKCitySearchOption alloc]init];
    citySearchOption.pageCapacity = 10;
    // 当前城市
    citySearchOption.city = _currentCity;
    // 搜索的内容
    citySearchOption.keyword = textField.text;
    //发起城市内POI检索
    BOOL flag = [_searcher poiSearchInCity:citySearchOption];
    if(flag) {
        [UIView animateWithDuration:0.3 animations:^{
            self->_tableView.height = DEVICE_SCREEN_HEIGHT - DEVICE_NAVIGATION_BAR_HEIGHT - DEVICE_TAB_BAR_HEIGHT - 50;
        }];
        
    }
    else {
        NSLog(@"城市内检索发送失败");
    }
}

处理搜索结果

//实现PoiSearchDeleage处理回调结果
- (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error
{
    if (error == BMK_SEARCH_NO_ERROR) {
        //在此处理正常结果
        [_addressListArray removeAllObjects];
        NSLog(@"%@", poiResultList);
        [_addressListArray addObjectsFromArray:poiResultList.poiInfoList];
        [_tableView reloadData];
    }
    else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){
        //当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表
        // result.cityList;
        NSLog(@"起始点有歧义");
    }
    else {
        NSLog(@"抱歉,未找到结果");
    }
}

更新: 解决右滑返回手势与地图滑动手势冲突

// 关闭右滑返回
id traget = self.navigationController.interactivePopGestureRecognizer.delegate;
    UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:traget action:nil];
    pan.cancelsTouchesInView = NO;
    pan.delaysTouchesEnded = NO;
    [self.view addGestureRecognizer:pan];

觉得有帮助的小伙伴, 可以动动勤劳的小手点个喜欢或者关注哦~
你们的肯定对我很重要!

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

推荐阅读更多精彩内容