【发布时间】:2016-02-25 10:55:14
【问题描述】:
在 Swift 或 Objective-C 中,我们可以轻松地创建一个 CLLocationmanager 并开始跟踪我们的位置。我们还可以设置一个 distanceFilter,它定义了设备在生成更新事件之前必须水平移动的最小距离(以米为单位)。我的 Swift 代码:
override func viewDidLoad() {
super.viewDidLoad()
manager = CLLocationManager()
manager.delegate = self
manager.distanceFilter = 10
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.startUpdatingLocation()
}
但在某些情况下,如果 gps 精度较低(即在树林、隧道、高层建筑之间...),则会生成不正确的尖峰。 CLLocationManager 缺少一个属性或方法来定义更新的最大距离以清除这种尖峰。
现在,我自己处理最大距离,将可用位置存储到单独的数组中:
var myLocations: [CLLocation] = []
func calculateDistanceBetweenTwoLocations(start:CLLocation,destination:CLLocation) {
var distanceInMeters = start.distanceFromLocation(destination)
if distanceInMeters < 20 {
myLocations.append(destination)
}
}
有没有更准确的方法?
【问题讨论】:
标签: ios objective-c xcode swift cllocationmanager