CLLocation Manager有时会提供错误的位置

时间:2019-06-28 17:21:44

标签: ios core-location

我使用的是iOS的核心位置API(CLLocation管理器),有时会给我错误的位置,例如如果我在美国,则会给我西班牙的纬度和经度。搜索了相同的堆栈溢出流,但无法获得与我的查询相关的答案。作为使用地图和位置的新手,我有点困惑。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我假设您使用的是物理设备,而不是模拟器来测试,并且您没有选择在xcode中模拟位置的选项。有时,CLLocation管理器可以返回例如旧的缓存位置,所以也许就是您发生的情况。在对接收到的CLLocation对象执行任何操作之前,建议您检查其horizo​​ntalAccuracy和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
}

答案 1 :(得分:0)

实际上,Apple周围使用wifi设备进行位置检测。因此,在“冷”启动时,gps芯片需要一些时间来启动和找到卫星,在此期间,设备的使用位置基于周围的路由器mac地址。如果这是您(或您邻居的)路由器曾经在西班牙,那么这就是原因-苹果Mac地址数据库的刷新非常缓慢,因此可能需要1-3个月。