簡體   English   中英

iOS CLLocationManager:消除峰值

[英]iOS CLLocationManager: Removing spikes

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

有沒有更准確的方法?

您正在尋找的是一種適用於GPS數據的數據清除方法。

如果您有時間,可以閱讀此PDF文件

解釋的一些方法是獲取5個並發點,並確保它是具有一定精度參數的群集的一部分。 如果沒有,請刪除掉的點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM