iOS 通过计步器和GPS实现自动标记停车位置功能

2017-04-21  本文已影响0人  Ran_戈

       前一篇文章介绍过了具体的实现方法,但是通过对数据的分析,仅仅依靠计步器push的数据再分辨“人行”、“车行”,这不是和iOS 底层API的CMMotionActivity做法一样吗?!苹果辣么多牛B的工程师还搞不定呢,我就想着还是另寻出路吧。


经过数据分析找到了规律性:

1. iOS计步器如果是人行状态,基本都是每隔2.4s左右push一个数据!!这点很重要!!看图1

2. 计步器在用户不走的情况下是不会push数据的。(乱摇晃会push数据)

3. 再观察103步那一条数据,这条数据和mark(mark是收集数据时候手动的停车标记)上面那条数据间隔了4′49″之多,可以大胆的猜想用户这段时间在开车!没错确实是“车行”状态!

4. 根据3的大胆猜想,再结合1和2,得出这样的结论:用户在10:51:54.383 开始上车,10:56:44.012下车,那么很有可能用户停好车走了,这就是关键点。只要抓住停车时间点然后对照到GPS时间点就可以拿到用户的停车位置!!!(当然行车状态还是需要GPS的速度辅助判断的)。

图 1

依靠上面的规律找到一种可行方案:

        试想如果结束时间差凡是大于3s(或者5s,开车基本情况下不会低于几秒吧!)的都有可能是行车状态,注意这里说的是可能!然后把结束时间差凡是大于3s的首尾时间拿出来(比如图1,9s的那个 开始时间是:10:51:44.499,结束时间:10:51:54.382)。

       然后通过对比到GPS数据的时间表里面,把GPS速度(V)拿出来,如果60%以上GPS速度是大于0的!那就可以断定这个大于3s的时间段是行车状态。如图2

图 2

        然后拿出计步器停车后push的第一条数据的结束时间10:51:54.382,对照到GPS最近的时间点10:51:54.000 然后拿出GPS的经纬度,就是用户停车位置!!

注意:

像上面这个案例有可能不对,因为假如用户上车后没有push数据然后车上摇了几下手机,这个时候计步器push数据了,可能会出现错误的判断用户下车了。但是如果用户继续开车行进,等到真正下车时候还是会一样会正确发送用户停车位置!所以这点不用担心。

继续分析

请看图1两个结束时间相差4′49″之多的时候进行数据分析:如图3

开始时间: 10:51:54.383 

结束时间:10:56:44.012

        通过分析计算这段时间的速度信息,80%以上的速度都是大于0的!可以判断这个时间段用户处于“车行”状态!最后一个时间点就是用户停车时间点,找到对应的GPS经纬度就是用户停车位置!

图 3

总结:

通过测试分析,每次计步器刚开始计步的时候都会延迟个5s左右的时间,就比如用户下车后行走可能会延迟个5s左右才能push数据,所以依靠最后一个结束时间可能会存在5-10m的停车误差!

上一篇下一篇

猜你喜欢

热点阅读