swift - 如何在速度测量过程中消除不可预测的速度峰值?

标签 swift geolocation location core-location

我编写了用于用户速度跟踪的服务。该服务使用Core Location框架来跟踪地理点并计算用户速度。

服务示例:

private func processLocation(_ current:CLLocation) {
    guard let location = lastLocation else {
        lastLocation = current
        speed.value = 0
        return
    }
    var speed = current.speed
    if (speed > 0) {
        speed.value = speed
    } else {
        speed = location.distance(from: current) / (current.timestamp.timeIntervalSince(location.timestamp))
        speed.value = speed
    }
    lastLocation = current
}

该服务的准确度可以接受。但在某些情况下,当您处于静止状态时,该服务会收到大量不可预测的峰值。

当我静止时记录。

Speed: 0.249200397696353
Speed: 0.778375328912623
Speed: 6.99212664940017 -> peak
Speed: 4.91809055561385 -> peak
Speed: 0.701735999364708
Speed: 0.025146066057472
Speed: 0.0233857682731226
Speed: 12.7814687721084 -> peak
Speed: 0.61632553168542
Speed: 7.37520678279276 -> peak
Speed: 0.023421072500409
Speed: 0.0343784939631481
Speed: 0.471982071125438
Speed: 0.0207671001927932
Speed: 0.0217459598583271
Speed: 0.0394697185852203
Speed: 0.439568634647097
Speed: 14.1348693612176 -> peak
Speed: 6.29588775714151 -> peak
Speed: 5.55254459904619 -> peak 
Speed: 0.218587071425142

如何摆脱此速度跟踪服务中不可预测的峰值?我应该更好地配置 Core Location 管理器吗?

最佳答案

我建议使用中值滤波器来减少数据峰值。定义用于检测峰值的阈值并对它们应用过滤器。引用此文档https://homepages.inf.ed.ac.uk/rbf/HIPR2/median.htm

关于swift - 如何在速度测量过程中消除不可预测的速度峰值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49939030/

相关文章:

ios - 如何删除 UITableView 上方的空白区域?

mysql - 无法从导入的 MySQL 数据库获取地理定位结果

ios - 如何在 iOS 应用程序中强制访问 'always' 位置

location - Android - 地理围栏不起作用,使用 coarse_location

javascript - npm 在哪里安装包?

ios - 如何设置可轻松跨越任何 iOS 设备的 UI?

swift - 如何将变量从按钮操作函数拉到另一个 View Controller 类?

ios - UITableView 中单元格之间的空间

javascript - 如何在jsp中将地理位置值传递给变量和sql查询

android - 如何从经纬度获取村名、区和街道