【问题标题】:iOS Location AccuracyiOS 定位精度
【发布时间】:2016-03-29 01:17:47
【问题描述】:

您好,我在 iOS 应用程序中使用位置,我将准确度设置如下:

 locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters

我正在使用这个函数来检查准确性

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    print(manager.location!.horizontalAccuracy)

    if locations.last!.horizontalAccuracy <= manager.desiredAccuracy{
        print(manager.location)
        location = locations.last!
        locationManager.stopUpdatingLocation()
        locationManager = nil           
    }
}

问题是准确率叠加到 1414 并且永远不会达到 100。有什么办法可以解决这个问题吗?

【问题讨论】:

  • 尝试在户外进行测试,启用 WiFi 后,三角测量应为您提供平均 65m 的距离。

标签: ios swift cllocationmanager cllocation


【解决方案1】:

这是硬件的限制,可能与您的特定位置相结合。如果您在室内编写代码,那么 GPS 将无法工作(尝试走到窗户前),因此您依赖 WiFi,它可能在您所在的位置精度非常差,或者在任何地方都不太准确的手机信号塔.

【讨论】:

    【解决方案2】:

    iOS 使用多种硬件选项来确定位置:手机信号塔、wifi 接入点、gps。这些选项按精度和功耗递增的顺序列出。

    iOS 使用 desiredAccuracy 作为提示它应该使用哪些硬件来满足您的请求,并且操作系统将尝试避免激活它认为不必要的硬件以达到所需的准确性。

    我相信 Apple 没有提供任何关于阈值的细节。

    在您的情况下,iOS 似乎没有使用 WiFi AP 硬件(或者可能无法连接到服务器以访问 AP 数据库,或者您周围没有足够的已知 AP),因此,您获得的所有位置读数都来自蜂窝塔三角测量。

    你可能想要

    • 请求比您需要的精度更高,但在达到所需精度后立即停止更新,或者
    • (假设 iOS9)使用新的 requestLocation() 方法,该方法至少对电池更友好,最多可能会尝试对激活哪些硬件做出更明智的决定 - 注意我做过不测试“至多”假设,有兴趣了解它是否正确。

    另外,书上没有,但是你可以通过查看速度值来判断位置读数是否来自 GPS,如果它无效(小于零),则它不是 GPS 位置。

    希望这会有所帮助, -- 亚历克斯

    【讨论】:

      【解决方案3】:

      What do horizontalAccuracy and verticalAccuracy of a CLLocation refer to?

      horizo​​ntalAccuracy 的 1414 表示水平 (纬度/经度)位置最多可偏离 1414 米(这只是估计的 错误)。这可能是由信号塔确定的位置 三角测量或 WiFi 位置数据。 GPS位置通常报告100m 或更好。

      要构建,似乎 1414 是 CLLocationManager 的常量 给出它是否根据手机信号塔确定了您的位置 三角测量。在我的测试中,如果它确定了您的位置 在 wifi 上,它的水平精度为 65m

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-19
        • 1970-01-01
        • 1970-01-01
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多