1. 4.集成高德定位

1.1.1. 九、集成高德定位

第1步:修改CQMapSDK.podspec

新增依赖s.dependency 'AMapLocation', '2.6.8',执行pod update

第2步:修改高德定位实现

import AMapLocationKit

/// 高德地图定位管理代理实现类
class AMapLocationManagerDelegateImpl: NSObject, AMapLocationManagerDelegate {

    weak var delegate: LocationManagerDelegateProtocol?
    private var managerProtocol: LocationManagerProtocol!

    init(managerProtocol: LocationManagerProtocol) {
        super.init()
        self.managerProtocol = managerProtocol
    }

    func amapLocationManager(_ manager: AMapLocationManager!, didFailWithError error: Error!) {
        delegate?.locationManager(managerProtocol, didFailWithError: error)
    }

    func amapLocationManager(_ manager: AMapLocationManager!, didUpdate location: CLLocation!) {
        let amapLocation = GaodeLocation(location: location)
        delegate?.locationManager(managerProtocol, didUpdate: amapLocation, orError: nil)
    }

    func amapLocationManager(_ manager: AMapLocationManager!, didUpdate newHeading: CLHeading!) {
        delegate?.locationManager(managerProtocol, didUpdate: newHeading)
    }

}

第3步:更新定位管理


import AMapLocationKit

/// 高德地图定位管理
class GaodeLocationManager: NSObject, LocationManagerProtocol {

    private lazy var delegateImpl: AMapLocationManagerDelegateImpl = {
        AMapLocationManagerDelegateImpl(managerProtocol: self)
    }()

    private lazy var locationManager: AMapLocationManager = {
        //初始化BMKLocationManager的实例
        let manager = AMapLocationManager()
        //设置定位管理类实例的代理
        manager.delegate = delegateImpl
        //设定定位坐标系类型,默认为 BMKLocationCoordinateTypeGCJ02
        //manager.coordinateType = BMKLocationCoordinateType.BMK09LL
        //设定定位精度,默认为 kCLLocationAccuracyBest
        manager.desiredAccuracy = kCLLocationAccuracyBest
        //设定定位类型,默认为 CLActivityTypeAutomotiveNavigation
        //manager.activityType = CLActivityType.automotiveNavigation
        //指定定位是否会被系统自动暂停,默认为NO
        manager.pausesLocationUpdatesAutomatically = false
        /**
         是否允许后台定位,默认为NO。只在iOS 9.0及之后起作用。
         设置为YES的时候必须保证 Background Modes 中的 Location updates 处于选中状态,否则会抛出异常。
         由于iOS系统限制,需要在定位未开始之前或定位停止之后,修改该属性的值才会有效果。
         */
        manager.allowsBackgroundLocationUpdates = false
        /**
         指定单次定位超时时间,默认为10s,最小值是2s。注意单次定位请求前设置。
         注意: 单次定位超时时间从确定了定位权限(非kCLAuthorizationStatusNotDetermined状态)
         后开始计算。
         */
        manager.locationTimeout = 10
        return manager
    }()

    /// 实现了 LocationManagerDelegateProtocol 协议的类指针。
    weak var delegate: LocationManagerDelegateProtocol? {
        didSet {
            delegateImpl.delegate = delegate
        }
    }

    /// 开始连续定位。调用此方法会cancel掉所有的单次定位请求。
    func startUpdatingLocation() {
        locationManager.startUpdatingLocation()
    }

    /// 停止连续定位。调用此方法会cancel掉所有的单次定位请求,可以用来取消单次定位。
    func stopUpdatingLocation() {
        locationManager.stopUpdatingLocation()
    }

    /// 开始设备朝向事件回调。
    func startUpdatingHeading() {
        locationManager.startUpdatingHeading()
    }

    /// r停止设备朝向事件回调。
    func stopUpdatingHeading() {
        locationManager.stopUpdatingHeading()
    }
}

results matching ""

    No results matching ""