美文网首页iOS Developer
Baidu 地图 SDK 的使用(二)---一行代码实现定位

Baidu 地图 SDK 的使用(二)---一行代码实现定位

作者: 小冰山口 | 来源:发表于2016-10-03 23:29 被阅读0次

    本人有若干成套学习视频, 可试看! 可试看! 可试看, 重要的事情说三遍 包含Java, 数据结构与算法, iOS, 安卓, python, flutter等等, 如有需要, 联系微信tsaievan.

    昨天实现了加载地图视图的功能
    但是会发现一个问题, 那就是:

    控制器既加载地图, 又请求定位, 今后很可能还要规划路径, 自定义大头针等等

    很显然, 控制器即将沦为一个 胖控制器, 这是我们不愿意看到的

    而且, 有这样一种可能, 在不同的控制器里, 都有可能要调用地图, 那么我们就可以封装一个地图管理类, 将地图相关的内容都封装到这个管理类里, 当我们需要用到地图的时候, 就去找这个管理类, 就像这样

    地图管理类
    管理类的单例代码
    #import "BaiduMapManager.h"
    @interface BaiduMapManager ()
    @end
    @implementation BaiduMapManager
    #pragma mark *** 设置一个单例 ***
    + (instancetype)sharedManager
    {
        static id manager = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            manager = [[BaiduMapManager alloc]init];
        });
        return manager;
    }
    

    从上图可以看到, 我还封装了一个管理类的分类, 这样管理类的可延展性就更好了, 需要加模块的时候, 就加一个分类就可以了

    我已经把昨天的加载地图的代码封装好了, 今天的重点是定位, 那么, 定位需要几个什么步骤呢?

    • info.plist 文件的配置(其实昨天就已经配置好了)

    开发者在使用定位功能之前,需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):
    NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述
    NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述

    配置好了之后, 系统会在 APP 第一次启动时, 提示用户授权允许定位

    提示用户授权允许定位
    • 初始化BMKLocationService(这是开启定位的关键类)
      • 初始化
      • 开启定位服务
    - (BMKLocationService *)locationService
    {
        if (!_locationService) {
            _locationService = [[BMKLocationService alloc]init];
            [_locationService startUserLocationService];
        }
        return _locationService;
    }
    
    • 设置locationService的代理
    - (void)startLoacation
    {
         /* 设置代理 */
        kBaiduMapManager.locationService.delegate = self;
    }
    
    • 完成代理的回调
      • 这个代理 API 就是当用户位置发生变化的时候调用
      • 将用户位置更新到地图视图上
      • 更改地图视图的追踪模式为跟随
    - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
    {
        [kBaiduMapManager.mapView updateLocationData:userLocation];
         /* 地图比例尺级别,在手机上当前可使用的级别为3-21级 */
        kBaiduMapManager.mapView.zoomLevel = 15;
        kBaiduMapManager.mapView.userTrackingMode = BMKUserTrackingModeFollow;
    }
    
    • 我将开始定位的方法封装在BaiduMapManager+location.h中, 这样,外界在需要完成地图定位的时候,就只需要 通过地图管理类的单例 调用startLoacation这一个 API 即可
    #pragma mark *** 视图的生命周期 ***
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self.view addSubview:kBaiduMapManager.mapView];
    }
    
    #pragma mark *** 点击定位按钮触发的事件 ***
    - (IBAction)locationBarButtonItemClickAction:(UIBarButtonItem *)sender {
        [kBaiduMapManager startLoacation];
    }
    
    
    让我们来看一下实现的效果
    百度地图定位效果

    PS. 本人有若干成套学习视频, 包含Java, 数据结构与算法, iOS, 安卓, python, flutter等等, 如有需要, 联系微信tsaievan.

    相关文章

      网友评论

        本文标题:Baidu 地图 SDK 的使用(二)---一行代码实现定位

        本文链接:https://www.haomeiwen.com/subject/uhyjyttx.html