百度地图集成(二、定位)

上面已经给大家讲解了简单百度地图API的方法,下面为大家介绍进行定位和模拟器模拟位置定位


首先需要info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):

NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述

NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述

建议添加NSLocationAlwaysUsageDescription


在.h文件中添加代理BMKLocationServiceDelegate




然后在.m文件中配置它的初始化方法,需要注意的是跟百度地图一样,在离开控制器的时候一定要取消代理,因为定位也是比较消耗的

    _locService.delegate = nil;   //定位指向空

然后我们初始化定位

- (BMKLocationService *)locService{
    if (_locService == nil){
        //初始化BMKLocationService
        _locService = [[BMKLocationService alloc]init];
        
        //设定定位精度
        _locService.desiredAccuracy = kCLLocationAccuracyBest;
        
        //开启定位服务
        [_locService startUserLocationService];
        _mapView.showsUserLocation = NO;//先关闭显示的定位图层
        _mapView.userTrackingMode = BMKUserTrackingModeNone;//设置定位的状态  (普通模式)
        _mapView.showsUserLocation = YES;//显示定位图层
        
    }
    return _locService;
}

最终还有定位的代理方法,我们这里需要用来判断方向更新和位置更新

#pragma mark - -----------方向更新后调用的方法
//实现相关delegate 处理位置信息更新
//处理方向变更信息
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation
{
    //刷新我在地图上面的位置
    [_mapView updateLocationData:userLocation];
}

#pragma mark - 位置更新之后调用方法
//位置坐标更新后刷新我在地图上面的位置
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
    //刷新我在地图上的位置
    [_mapView updateLocationData:userLocation];
}


但是这样掉出来之后,你会发现你的位置竟然还是在北京市啊,不要着急我们接下来需要配置一下

首先我们要调用反地理编码

在定位的代理方法里面的位置更新之后调用的方法里面调用

#pragma mark - 位置更新之后调用方法
//位置坐标更新后刷新我在地图上面的位置
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
    //刷新我在地图上的位置
    [_mapView updateLocationData:userLocation];
    
    if (_isOPEN==NO)    //我定义的一个全局变量,用来控制反地理编码次数的
    {
        //反地理编码出地理位置
        CLLocationCoordinate2D pt=(CLLocationCoordinate2D){0,0};
        pt=(CLLocationCoordinate2D){userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude};
        BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init];
        reverseGeocodeSearchOption.reverseGeoPoint = pt;
        BMKGeoCodeSearch *_geocodesearch = [[BMKGeoCodeSearch alloc]init];
        _geocodesearch.delegate = self;
        BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption];
        if(flag)
        {
            NSLog(@"反geo检索发送成功");
            _isOPEN = YES;      //如果发送反地理编码成功,就只是发送一次,获取一次,通过bool值isOPEN关闭反地理编码
        }
        else
        {
            NSLog(@"反geo检索发送失败");
        }
    }
}



然后我们需要调用反地理编码了

百度地图的反地理编码,这是一个神奇的东西!

首先我们需要在.h中添加百度地图地理编码的代理

BMKGeoCodeSearchDelegate

然后我们在.m文件中调用代理的方法

#pragma mark - 反地理编码代理方法  输入坐标 返回地点名称
/*
 通过反地理编码可以根据左边的到所在位置的信息
 */
- (void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error
{
    NSLog(@"result.address = %@",result.address);  //定位所在地址
    NSLog(@"result.detail.address.city = %@",result.addressDetail.city);   //定位所在城市
    NSLog(@"result.businessCircle = %@",result.businessCircle);  //用户所在商圈(发布动态)
    NSLog(@"result.addressDetail.district = %@",result.addressDetail.district);  //用户所在区
    
    //让地图的位置处于搜索处的位置
    _mapView.centerCoordinate = result.location;
    
}

这样我们的定位还不算是完整,我们需要模拟器,模拟出一个位置


因为我是在上海,所以我输入了一个上海的经纬度坐标


不过有一点不太好,就是我这边因为有需求,所以在位置改变的时候获取了自己的位置,所以会一直反地理编码,不过我添加了一个判断,你们可以定义一个bool值来判断开启关闭反地理

最终的运行结果图如下


本人长期混迹于这两个群里面吹牛逼,如果有同样爱好的人可以加群

341545727

98787555




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值