【问题标题】:iOS CoreLocation checking CLLocation timestamp to use itiOS CoreLocation 检查 CLLocation 时间戳以使用它
【发布时间】:2013-01-02 09:05:04
【问题描述】:

如何检查 CLLocation 对象并决定是要使用它还是丢弃结果并获取新的位置更新?

我在 CLLocation 上看到了时间戳属性,但我不确定如何将其与当前时间进行比较。

另外,在我比较时间并找到以秒为单位的差异之后,差异应该在什么值下才能使用该 CLLocation 对象?什么是好的阈值。

谢谢!

【问题讨论】:

  • if (location.timestamp + someSeconds < [[NSDate date] timeIntervalSince1970]) { /* need new data */ }

标签: iphone ios nsdate core-location cllocationmanager


【解决方案1】:

检查时间戳真的很重要,因为 iOS 通常会缓存位置,并且作为第一个度量返回最后缓存的,所以这是我在 Core Location Manager 的委托方法中所做的:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
    CLLocation * newLocation = [locations lastObject];
        //check if coordinates are consistent
        if (newLocation.horizontalAccuracy < 0) {
            return;
        }
        NSTimeInterval interval = [newLocation.timestamp timeIntervalSinceNow];
        //check against absolute value of the interval
        if (abs(interval)<30) {
            //DO STUFF
        }
    }

我使用 30 秒。 如您所见,我还检查了询问水平精度的结果的一致性。
希望这会有所帮助,
安德里亚

【讨论】:

  • 仅供参考,这将检查日期是否不会太远。使用过去的时间戳意味着间隔为负,因此&lt;30始终为真。
  • 此外,仅当位置无效时,horizo​​ntalAccuracy 才小于零。所以也许一个额外的条件会很有用,例如如果我们希望精度在 50 米以内,添加 ||在上述条件下,horizo​​ntalAccuracy > 50
  • 那个sn-p是通用的。对0的检查只是为了检查它是否无效,而不是为了任何其他目的。由于时间间隔是作为绝对值请求的,并且考虑到将来没有位置具有值,因此条件可能为假。
猜你喜欢
  • 1970-01-01
  • 2014-12-19
  • 2018-12-10
  • 1970-01-01
  • 2015-02-09
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多