对,这是我将采取的方法:
- 创建一个空列表,其中包含具有 GPS 位置和 IsNew 标志的类
- 在开始单击时,将当前 GPS 位置添加到列表中(IsNew = true),并作为计时器
- 每 10 秒(可能会在测试后调整)在列表中弹出当前 GPS 位置(IsNew = false)
- 如果单击暂停,则停止计时器并弹出当前 GPS
- 恢复时,重新启动计时器,弹出当前 GPS (IsNew = true)
- 停止时,停止计时器和弹出 GPS
现在,在所有这些结束时,您将获得一个带有一些 IsNew 标志的 GPS 位置列表,可能是这样的:
- GPS = {x, y, z}, IsNew = true //开始按钮点击
- GPS = {x, y, z}, IsNew = false //计时器已过
- GPS = {x, y, z}, IsNew = false //计时器已过
- GPS = {x, y, z}, IsNew = false //计时器已过
- GPS = {x, y, z}, IsNew = false //暂停点击
- GPS = {x, y, z}, IsNew = true //点击重启
- GPS = {x, y, z}, IsNew = false //计时器已过
- GPS = {x, y, z}, IsNew = false //计时器已过
- GPS = {x, y, z}, IsNew = false //计时器已过
- GPS = {x, y, z}, IsNew = false //停止点击
现在该列表应该包含足够的信息,以便您使用一些不错的数学来计算总距离;-)(这里有一些信息)
请注意,如果IsNew = true
那样,则不应在总距离中包括它与前一点之间的距离。
此外,速度 = 距离 / 时间
当然,您可以采用另一种方法并在处理每个点时计算总距离。这将允许您提供“半实时”反馈。
为此,您将保留一个总距离计数器并使用每个 GPS 点更新它(即当计时器经过时)......使用这种方法,您可能可以避免存储“IsNew”标志的需要