CLLocation(位置)
- CLLocation用来表示某个位置的地理信息,比如经纬度、海拔等等
CLLocation常用属性
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
@property(readonly, nonatomic) CLLocationDistance altitude;
- 路线,航向(取值范围是0.0° ~ 359.9°,0.0°代表正北方向),负数代表航向不可用
@property(readonly, nonatomic) CLLocationDirection course;
@property(readonly, nonatomic) CLLocationSpeed speed;
CLLocation(位置)常用方法
- (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. 注意事项
- 使用位置前, 务必判断当前获取的位置是否有效
- 如果水平精确度小于零, 代表虽然可以获取位置对象, 但是数据错误, 不可用
if (location.horizontalAccuracy < 0) return;