【问题标题】:Getting time from GPS on iOS在 iOS 上从 GPS 获取时间
【发布时间】:2015-11-02 10:37:16
【问题描述】:

我正在开发一个跟踪器应用程序。该应用程序需要以高精度知道设备位置,即它使用位置服务并忽略水平精度低于 20 米的位置。 CLLocation 没有明确声明是否通过 GPS 确定。但是,如果水平精度在 20 米或更高,则可以认为是 GPS 定位。

此外,我需要知道确定位置时的时间戳。我知道CLLocation 类中的属性timestamp。但是,我想从 GPS 获取时间戳,而不是系统时间。

是否可以获取 GPS 时间?我不关心 GPS 信号不可用的情况。我只需要获取我刚刚收到的 GPS 位置(高精度位置)的 GPS 时间。

关于stackoverflow的其他问题,建议使用以下代码sn-p:

CLLocation* location = [[CLLocation alloc] initWithLatitude:(CLLocationDegrees) 0.0 longitude:(CLLocationDegrees) 0.0];
NSDate* now = location.timestamp;

是否可以保证location.timestamp[NSDate date] 与 GPS 更相关?

如果关闭自动时间设置似乎不是真的。如果我转到设置 -> 常规 -> 日期和时间并关闭“自动设置”,则属性 timestamp 包含手动设置的系统时间。那么至少在自动时间设置开启时是否与 GPS 相关?

【问题讨论】:

  • “GPS 时间”我假设您是指从卫星发送单曲的时间?如果是这样,那将与每颗卫星不同。 GPS 通过查看系统时间与其接收到的信号的时间戳之间的时间差来工作。 CLLocation 上的时间很可能是您所追求的。 TBH,我不太确定您所说的“GPS 时间”是什么意思。
  • “GPS 时间”是指卫星发送的时间。但是,如果我在设备上手动设置系统时间,则timestamp 包含该手动设置的时间。所以我猜CLLocation上的timestamp只是设备的系统时间,与GPS卫星发送的时间无关。我只是想知道这是不是真的,即使系统时间设置为自动同步也是如此。

标签: ios gps core-location


【解决方案1】:
However, I would like to get the timestamp from GPS, not the system time.

您无法获取 GPS 芯片提供的时间戳。

如果用户人为设置了错误的时间,ios 也会在其位置中使用此偏移量。

I just need to get the GPS time for a GPS location (location with high accuracy) I have just received.

如果设备设置为自动设置系统时间,则gps定位时间应该是准确的。

So is it more-GPS related at least when automatic time setting is turned on?

是的

Is there any guarantee that location.timestamp is something more GPS-related than [NSDate date]?

它总是更相关,[NSDate date] 是当前系统时间,而 location.time 是与位置记录时间相关的时间。这可以通过例如 0.6 秒来抵消,或者在启动后的第一次修复中甚至更多。

为了检查位置是否是当前位置,Apple 建议计算系统时间和位置时间之间的差异。

【讨论】:

  • 好的,这很好。 location.timestamp 优于 [NSDate date],因为它消除了记录时间和应用程序处理位置时间之间的延迟。但是,问题是:location.timestamp总是只是系统时间还是GPS卫星发送的时间?
  • 这是某种与 gps 时间同步的系统时间。Apple 似乎存储了用户设置的偏移量,并保持此偏移量同步(例如,在更改时区时)。我不确定他们到底在做什么,但这是我的看法。
  • 你能建议任何实验、观察、文档中的陈述或其他类型的论据来证明location.timestamp 不仅仅是一个纯系统时间吗?
  • 当然这样的文件不存在,因为苹果隐藏了所有内部细节,但是注意:是的,看看毫秒部分,GPS模块几乎总是使用0,所以它们在秒之后没有分数。虽然系统时间通常不会在 0 毫秒。(机会是 1:1000)
  • 我尝试记录location.timestamp,但毫秒部分不为零。当然,这可能是操作系统版本的问题,我在 iOS 8.4.1 的 iPhone 5 上观察到了这一点。
【解决方案2】:

我认为时间戳是设备端计算的,很可能与卫星的时间戳无关。
CoreLocation 的工作完全不透明,Apple 听起来不太可能让您访问 GPS 卫星时间戳等原始数据......

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多