美文网首页
CLLocation

CLLocation

作者: 翻这个墙 | 来源:发表于2017-11-23 10:24 被阅读76次

    CLLocation(位置)

    • CLLocation用来表示某个位置的地理信息,比如经纬度、海拔等等

    CLLocation常用属性

    • 当前位置所在的经纬度数据
    @property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
    
    • 海拔
    @property(readonly, nonatomic) CLLocationDistance altitude;
    
    • 路线,航向(取值范围是0.0° ~ 359.9°,0.0°代表正北方向),负数代表航向不可用
    @property(readonly, nonatomic) CLLocationDirection course;
    
    • 移动速度(单位是m/s)
    @property(readonly, nonatomic) CLLocationSpeed speed;
    

    CLLocation(位置)常用方法

    • 计算2个位置之间的距离
    - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
    

    3. 场景演练

    1. 场景演示:打印当前用户的行走方向,偏离角度以及对应的行走距离,
        例如:”北偏东30度方向,移动了8米”
    2. 实现步骤:
        1> 获取对应的方向偏向(例如”正东”,”东偏南”)
        2> 获取对应的偏离角度(并判断是否是正方向)
        3> 计算行走距离
        4> 打印信息
    
            // 1.取出位置,建议取出最后一个,因为最后一个最准确
            guard let location = locations.last else {return}
    
            // 2.判断位置是否可用
            if location.horizontalAccuracy < 0 {return}
    
            // 3.判断航向是否可用
            if location.course < 0 {return}
    
    
    //         场景演示:打印当前用户的行走方向,偏离角度以及对应的行走距离,
    //        例如:”北偏东 30度方向,移动了8米”
    
            // 确定方向
            let angleStrs = ["北偏东", "东偏南", "南偏西", "西偏北"];
            let index = Int(location.course / 90)
            var angleStr = angleStrs[index]
    
            // 确定偏移角度
            let angle = location.course % 90
    
            if Int(angle) == 0 {
                // swift
    //            let index = angleStr.startIndex.advancedBy(1)
    //            angleStr = "正" + angleStr.substringToIndex(index)
    
                // OC
                angleStr = "正" + (angleStr as NSString).substringToIndex(1)
            }
    
            // 计算移动了多少米
            let lastLoc = lastLocation ?? location
            let distance = location.distanceFromLocation(lastLoc)
            lastLocation = location
    
            // 拼接字符串,并打印
            if Int(angle) == 0 {
                 print("\(angleStr), 移动了\(distance)米")
            } else {
                 print("\(angleStr) \(angle)角度, 移动了\(distance)米")
            }
    

    4. 注意事项

    1. 使用位置前, 务必判断当前获取的位置是否有效
      • 如果水平精确度小于零, 代表虽然可以获取位置对象, 但是数据错误, 不可用
    if (location.horizontalAccuracy < 0) return;
    

    相关文章

      网友评论

          本文标题:CLLocation

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