iOS CLLocationManager:删除峰值

时间:2016-02-25 10:55:15

标签: ios objective-c xcode swift cllocationmanager

在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)
    }
} 

有更准确的方法吗?

1 个答案:

答案 0 :(得分:1)

您正在寻找的是适用于GPS数据的Data cleansing方法。

如果您还有一些时间,可以阅读this PDF about it

解释的一些方法是采用5个并发点并确保它是具有特定精度参数的聚类的一部分。如果没有,请删除不存在的点。