【发布时间】:2019-06-28 17:21:44
【问题描述】:
我正在使用 iOS 的核心位置 API(CLLocation 管理器),它有时会给我错误的位置,比如如果我在美国,它会给我西班牙的纬度和经度。搜索堆栈溢出相同但无法获得我的查询的相关答案。作为新手使用地图和位置,我有点困惑。任何帮助将不胜感激。
【问题讨论】:
-
这是仅在模拟器上还是在物理设备上?
标签: ios core-location
我正在使用 iOS 的核心位置 API(CLLocation 管理器),它有时会给我错误的位置,比如如果我在美国,它会给我西班牙的纬度和经度。搜索堆栈溢出相同但无法获得我的查询的相关答案。作为新手使用地图和位置,我有点困惑。任何帮助将不胜感激。
【问题讨论】:
标签: ios core-location
我假设您使用的是物理设备而不是模拟器来测试它,并且您没有选择在 xcode 中模拟位置的选项。有时 CLLocation 管理器可以返回例如一个旧的缓存位置,所以也许这就是发生在你身上的事情。在你对收到的 CLLocation 对象做任何事情之前,我建议检查它的 HorizontalAccuracy 和 timestamp 属性。
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let lastLocation = locations.last, lastLocation.horizontalAccuracy < 1000, abs(lastLocation.timestamp.timeIntervalSinceNow) < 60 else {
// location not accurate or to old (cached previously) so do not do anything
return
}
// do something
}
【讨论】:
实际上,Apple 使用周围的 wifi 设备进行位置检测。因此,在“冷”启动时,gps 芯片需要一些时间来启动和查找卫星,并且在此期间设备使用基于路由器周围 MAC 地址的位置。如果您(或您邻居的)路由器曾经在西班牙,那就是原因 - Apple 的 mac 地址数据库刷新非常缓慢,可能需要 1-3 个月。
【讨论】: