【问题标题】:CLLocation Manager giving incorrect location sometimeCLLocation Manager 有时会给出不正确的位置
【发布时间】:2019-06-28 17:21:44
【问题描述】:

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

【问题讨论】:

  • 这是仅在模拟器上还是在物理设备上?

标签: ios core-location


【解决方案1】:

我假设您使用的是物理设备而不是模拟器来测试它,并且您没有选择在 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
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      相关资源
      最近更新 更多