美文网首页
iOS - Core Location

iOS - Core Location

作者: ienos | 来源:发表于2022-07-08 13:42 被阅读0次

    定位权限是否可以使用

    CLLocationManager.locationServicesEnabled()
    

    定位权限授权状态

    // CLAuthorizationStatus
    kCLAuthorizationStatusNotDetermined // 用户尚未对应用程序做出决定
    kCLAuthorizationStatusRestricted // 此应用程序无位置服务,用户无法更改
    kCLAuthorizationStatusDenied // 用户明确拒绝该定位服务,或者在设置中已禁用
    kCLAuthorizationStatusAuthorizedAlways // 允许在任何时候进行位置定位
    kCLAuthorizationStatusAuthorizedWhenInUse // 仅允许在用户使用应用程序时使用
    
    // 获取当前应用程序授权状态
    CLLocationManager.authorizationStatus()
    

    定位授权状态请求

    下面两个方法只有在 authorizationStatus == kCLAuthorizationStatusNotDetermined 条件下调用才有作用

    
    /*
    在 info.plist 中添加 
    NSLocationAlwaysAndWhenInUseUsageDescription
    NSLocationWhenInUseUsageDescription
    */
    locationManager.requestAlwaysAuthorization()
    
    /*
    在 info.plist 中添加 
    NSLocationWhenInUsageDescription
    */
    
    locationManager.requestWhenInUseAuthorization()
    

    初始化定位管理对象

    let locationManager = CLLocationManager.init()
    locationManager.delegate = self
    locationManager.allowsBackgroundLocationUpdates = true /// 后台定位
    /*
        kCLLocationAccuracyBestForNavigation // 使用附加传感器来促进导航应用程序的最高可能精度
        kCLLocationAccuracyBest // 最佳精度水平
        kCLLocationAccuracyNearestTenMeters // 精确到所需目标的十米以内
        kCLLocationAccuracyHundredMeters // 精确到百米以内
        kCLLocationAccuracyKilometer // 精确到最近的一公里
        kCLLocationAccuracyThreeKilometers // 精确到最近的三公里
    */
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    /// 以米为单位指定最小更新距离
    locationManager.distanceFilter = 5.0
    /// 开始定位
    locationManager.startUpdatingLocation()
    

    停止定位

    locationManager.stopUpdatingLocation()
    

    定位回调 CLLocationManagerDelegate

    func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
            
    }
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
            /// 定位失败
    }
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    
    }
    

    获取经纬度

    CLLocation

    // 获取当前的经纬度
    curLocation.coordinate.longitude // 经度
    curLocation.coordinate.latitude // 纬度
    
    // 两个经纬度之间的距离, 单位 m
    lastLocation.distance(from: curLocation) 
    
    // 获取海拔高度
    curLocation.altitude
    
    

    过滤无效数据

    location.horizontalAccuracy /// 水平精度,负数无效
    location.verticalAccuracy /// 垂直精度,负数无效

    // 无效数据过滤
    let distanceInM = lastLocation.distance(from: curLocation)
    if distanceInM < curLocation.horiontalAccuracy * 0.5 { return }
    

    相关文章

      网友评论

          本文标题:iOS - Core Location

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