ios位置跟踪.距离、速度、时间不一致



我正在使用IOS位置管理器来跟踪位置。总的来说,它运行得很好,我以每秒1次的迭代速度接收距离、速度和秒数。

我在高层注意到的一件事是,总时间和总距离与预期速度不匹配,总是很低。例如,步行1英里可能有大约7分钟的相关时间。我更希望这是20-30分钟以上。

从数据来看,这些值单独来看似乎都是合理的,但长期的总和是没有意义的。我正在使用BestAccuracy来获取GPS信号,所以我想这不会太差。

有时会出现一些甚至严重偏离轨道的光点。比如100米的距离,在5秒的窗口内,以2英里/小时的步行速度。有了这些,我认为GPS只是在重新定位。但这并不一定意味着其余的都是100%的工程师。也许应该过滤掉这些极端情况吗?

我下面的代码显示,每个都是单独计算的,而不是相互计算的。我应该用二来计算第三个吗?即时间=距离/速度或类似。

- (void)locationManager:(CLLocationManager *)manager
        didUpdateLocations:(NSArray *)locations {
    for(int i = 0; i < [locations count]; i++){
       CLLocation *newLocation = [locations objectAtIndex:i];
       // meters will be set on every item but very first location
       CLLocationDistance meters = (oldLocation != nil ? [newLocation distanceFromLocation:oldLocation] : 0);
       // seconds since now
       NSTimeInterval howRecent = [newLocation.timestamp timeIntervalSinceNow];
       // seconds since last event, float level seconds with good precision
       double eventDateMilli = [newLocation.timestamp timeIntervalSince1970];
       double oldLocationMilli = [oldLocation.timestamp timeIntervalSince1970];
       NSTimeInterval secondsBetween = fabs(eventDateMilli - oldLocationMilli);
       currentSpeed =  (newLocation.speed < 0 ? 0 : newLocation.speed);
       // we now have meters, currentSpeed, secondsBetween
       //   ie, distance, speed, time
       // save to network, etc, for analysis and summation

       oldLocation = newLocation;
   }
}

您是否在后台使用定位服务?如果是这样,问题可能是定位服务刚刚关闭。您应该将CLLocationManagerpausesLocationUpdatesAutomatically属性设置为NO。此外,请确保您的Info.plist文件中有UIBackgroundModes键,并且location作为其数组中的值。

最新更新