您好我在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.有没有办法解决这个问题?
答案 0 :(得分:3)
这是硬件的限制,可能与您的特定位置相结合。如果您在室内编写代码,那么GPS无法正常工作(尝试走到窗口),所以您依赖的WiFi可能只是非常糟糕的精确度,或者在任何地方都不太精确的手机信号塔上。
答案 1 :(得分:3)
iOS使用多种硬件选项来确定位置:手机信号塔,wifi接入点,gps。这些选项以增加的准确度和功耗顺序列出。
iOS使用desiredAccuracy作为它应该为您的请求服务的硬件的暗示,操作系统将尽力避免激活它认为不必要的硬件以达到所需的准确度。
我认为Apple没有提供有关阈值的具体信息。
在您的情况下,iOS似乎不会使用WiFi AP硬件(或者可能无法连接到服务器以访问AP数据库,或者您周围没有足够的已知 AP),因此,您获得的所有位置读数均来自细胞塔三角测量。
您可能想要
此外,这不在书中,但您可以通过查看速度值来判断位置读数是否来自GPS,如果它是无效的(小于零),则它不是GPS位置。
希望这有帮助, - 亚历克斯
答案 2 :(得分:1)
What do horizontalAccuracy and verticalAccuracy of a CLLocation refer to?
1414为horizontalAccuracy表示水平 (纬度/经度)位置最高可达1414米(这只是一个估计值 错误)。这可能是由细胞塔决定的位置 三角测量或WiFi位置数据。 GPS位置通常报告100米 或更好。
要构建,似乎1414是CLLocationManager的常量 如果已根据手机信号塔确定了您的位置,则会给出 三角测量。在我的测试中,如果它确定了您的位置 在wifi上,它的水平精度为65米