iPhone GPS CoreLocation可快速获得准确的阅读

时间:2017-08-13 19:35:42

标签: swift gps core-location

我是GPS新手并使用CoreLocation将用户的位置缩小到理想的2米。我已经读过iPhone GPS坐标精确到4米的地方,但我尝试了一些方法来提高读数的准确性。

我目前的解决方案

涉及设置一个70秒的窗口,以平均最多3个坐标的列表,并将它们替换为更新的更准确的读数。平均坐标在大约一分钟内跳跃,然后降落在~8米(观察到的)附近真实的位置。

选择以下代码块:

...
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.distanceFilter = kCLDistanceFilterNone
... 

var timer = 70

func startTracking() {
    var _ = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(countdown), userInfo: nil, repeats: true)
}

@objc func countdown() { self.timer -= 1 }

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    // 70 seconds to pin down verify location
    if self.timer <= 1 {return}

    if let oldLoc = locationDataService.initialLocationEstimate {
        updateInitialLocation(newLocation: self.locationManager.location!)
    }
}

...
updateInitialLocationEstimate() {
    let newLocationAccuracy = newLocation.horizontalAccuracy

    if self.initialLocationAccuracy != nil {
        // don't use if greater than 12m and less accurate.
        if newLocationAccuracy > self.initialLocationAccuracy! && newLocationAccuracy > 8 {
            return
        } else if newLocation.horizontalAccuracy < initialLocationAccuracy! {
            // eliminates the less accurate readings
            trimByAccuracy(locations: &self.initialLocationEstimates, newAccuracy: newLocationAccuracy)
            self.initialLocationAccuracy = newLocationAccuracy
        }

        if (self.initialLocationEstimates.count > 4) {
            initialLocationEstimates.removeFirst()
        }
    } else {
        self.initialLocationAccuracy = newLocationAccuracy
    }
    self.initialLocationEstimates.append(newLocation)

    self.initialLocationEstimate = estimateCentralCoordinate(locations: initialLocationEstimates, accuracy: initialLocationAccuracy!)
}

我在一些事情上挣扎:

1)获得> 4m(观察到的)准确度等级所需的时间的一半。目前,大约需要一分钟才能获得约8米的读数。我有什么可以做的吗?

2)提高观察到的准确性。任何建议在这里都会有所帮助。

3)有人建议我使用卡尔曼滤波器,但CoreLocation给我的速度是不确定的。当我静止不动时,它经常在+/- 0-1m / s之间波动,是否有一些我不知道的设置来稳定读数?

4)我应该进行平均/过滤吗?我已经读过好的GPS软件已经达到平均值,但我在iOS CoreLocation文档中没有看到任何内容。

真的,任何帮助都将不胜感激。谢谢。

0 个答案:

没有答案