ios - 计算用户平均速度的最快方法?

标签 ios swift cllocationmanager

我正在使用位置管理器并尝试计算用户在过去 60 秒内的平均速度。

didUpdateLocations 被调用时,我每秒从位置管理器获取用户的速度。然后我将该速度附加到一个数组。

我的计划是根据 didUpdateLocations 中记录的速度数组计算平均速度。

但是,在开始时,数组是空的。虽然它每秒都会填充一次,但我仍然想计算平均速度,即使阵列还没有 60 种速度。在这种情况下,我只能使用记录的值,例如,在 5 秒和 5 种速度后,将使用这些值计算平均速度。一段时间后,数组被填充,最新的速度值的附加使得最旧的速度值从数组中移除。

有没有更简单的方法来完成这个?

最佳答案

您目前的解释听起来是正确的。您仍然可以在阵列未满的情况下获得平均速度。您可以像这样设置速度阵列:

let max = 60
var speeds = Array<Float>()

然后,每次调用 didUpdateLocations 方法时,您都可以将用户的速度添加到此 speeds 数组中。但是,由于您不希望数组的长度超过 60 个项目,因此您可以设置一个最大值并删除较旧的速度以将长度保持在 60 个。您可以像这样实现:

// In didUpdateLocations():    

if speeds.count == max {
    speeds.remove(at: 0)
}

speeds.append(newSpeed)

然后,要计算它们的平均速度,只需从速度数组中取出项目,然后用它们的总和除以它们的数量来求平均。

var total: Float = 0.0
speeds.forEach { speed in
    total += speed
}

var averageSpeed = total / Float(speeds.count)
print(averageSpeed)

关于ios - 计算用户平均速度的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44467307/

相关文章:

c# - F#:从 ViewController 中的 Storyboard 访问 UI 元素?

ios - 如何制作一个在 hh :mm:ss:ms 中计算的 Swift 3.0 计时器

ios - 如何在 UITextView 中居中对齐文本?

iphone - iOS CoreLocation 检查 CLLocation 时间戳以使用它

ios - 用于 GoogleMaps 的 ionic 构建 ios - 命令的错误代码 65

ios - Facebook 登录在 iOS 11 上显示额外的确认弹出窗口

ios - 如何在另一个 ImageView 的一角添加系统图像

ios - 如何使用 Alamofire Swift 4 以 JSON 编码传递数据

ios - startMonitoringForRegion 不会触发 didEnterRegion 和 didExitRegion

ios - MapKit 帮助。无法首先显示我的位置