iOS位置准确性

时间:2015-12-22 17:40:53

标签: ios swift cllocationmanager cllocation

您好我在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.有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

iOS使用desiredAccuracy作为它应该为您的请求服务的硬件的暗示,操作系统将尽力避免激活它认为不必要的硬件以达到所需的准确度。

我认为Apple没有提供有关阈值的具体信息。

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

您可能想要

  • 要求的准确度高于您的要求,但只要您获得所需的准确度,就会停止更新,或
  • (假设iOS9)使用新的requestLocation()方法,该方法至少对电池更友好,并且最多可能会尝试对要激活的硬件做出更明智的决定 - 注意我做了不测试&#34;最多&#34;假设,有兴趣了解它是否正确。

此外,这不在书中,但您可以通过查看速度值来判断位置读数是否来自GPS,如果它是无效的(小于零),则它不是GPS位置。

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

答案 2 :(得分:1)

What do horizontalAccuracy and verticalAccuracy of a CLLocation refer to?

  

1414为horizo​​ntalAccuracy表示水平   (纬度/经度)位置最高可达1414米(这只是一个估计值   错误)。这可能是由细胞塔决定的位置   三角测量或WiFi位置数据。 GPS位置通常报告100米   或更好。

     

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