我想跟踪用户的位置并根据他的移动在离线 map 中更新它,而无需使用 GPS 且必须依赖位置更新。
我尝试了 CMMotionManager
并获得了 G 级的加速度
。然而,这是加速度而不是速度。管理器还允许获取重力、旋转和姿态。
有没有办法计算用户的速度(以米/秒为单位)?如果是这样,我该怎么办?有公式/代码示例吗?
最佳答案
执行此操作的唯一方法是假设应用程序启动时手机处于静止状态。使用加速度计无法区分静止状态和以恒定速率移动之间的区别。例如,如果您乘坐喷气式飞机,您将无法判断自己正在以 800 公里/小时的速度飞行并且没有静止不动。
如果您确实假设开始时处于静止状态,则可以通过跟踪加速度得出非常粗略的速度估计,但实际上,如果测量值很小,结果很容易出现大量“漂移误差”错误很快就会导致完全错误的当前速度结果,因此您的位置会毫无希望地漂移。
所以在实践中,你的问题的答案是“不,不是真的。”
编辑:
再多思考一下,如果您可以施加一些假设,您也许可以获得有用的结果。
假设我们假设用户正在步行。我们排除骑自行车/汽车/火车/飞机旅行。步行时,你真的不会“漂移”。当用户采取步骤时,您会断断续续地移动。事实上,您可以使用加速度计来识别人行走时的弹跳特征。有些计步器应用程序已经可以做到这一点。对于步行,您可能会假设在没有加速度的情况下(忽略恒定的重力),手机是静止的,因此将速度归零并保持为零,直到加速度超过某个阈值。这将使您能够减少漂移误差。
关于ios - 使用 CoreMotion 跟踪用户速度,无需 GPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35013237/