在iOS中获得准确位置

在iOS中获得准确位置,ios,swift,gps,cllocationmanager,Ios,Swift,Gps,Cllocationmanager,我使用此设置设置位置精度: locationManager.desiredAccuracy = kCLLocationAccuracyBest 我通过这个得到了位置: if let location = locations.first { .... } 但它多次更新位置,其中许多都不准确。例如,当我找到位置时,它距离设备位置大约100米 如何获得准确的位置 我知道,在设备确定位置之前,前几个位置是不准确的。请查看位置的HorizontalAccurance属性(CLLocation)。这是以

我使用此设置设置位置精度:

locationManager.desiredAccuracy = kCLLocationAccuracyBest
我通过这个得到了位置:

if let location = locations.first {
....
}
但它多次更新位置,其中许多都不准确。例如,当我找到位置时,它距离设备位置大约100米

如何获得准确的位置


我知道,在设备确定位置之前,前几个位置是不准确的。

请查看位置的HorizontalAccurance属性(CLLocation)。这是以米为单位的。您可以使用此属性忽略不够准确的位置读数。

根据多年的堆芯位置经验。GPS芯片需要一段时间才能“预热”,有时在锁定前会报告几个位置。你将更多地在室内体验,而不是在清晰的天空中。带有金属屋顶的建筑物也会影响精度。但是,如果gps更新在某个阈值之内/之外,则可以使用distanceFilter属性(以米为单位指定),并使用此属性设置所需的精度,从而忽略gps更新。

来源:

接收机尽最大努力达到要求的精度;然而, 无法保证实际精度

因此,您无法保证检测到的位置离您有多近,但您可以尝试以下几点:

  • 使用。这将使您获得更准确的读数,但需要更多的电池使用成本

  • 过滤位置,尽管我不知道这是否可行,因为您拥有的唯一数据是从您正在使用的位置管理器接收到的数据


  • 您可以检查每次更新的准确性,并筛选位置,直到它们达到可靠的准确性:

        func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        print(manager.location!.horizontalAccuracy)
    
        if locations.last!.horizontalAccuracy <= manager.desiredAccuracy{
            print(manager.location)         
        }
    }
    
    func locationManager(管理器:CLLocationManager,didUpdateLocations位置:[CLLocation]){
    打印(管理器位置!.HorizontalAccurance)
    
    if locations.last!。HorizontalAccurance谢谢。我如何才能等到设备确定位置后再获取它?我可以以百分比的形式获取位置的准确性吗?不幸的是,精度无法保证,100米以内被认为是“相当准确的”这也取决于你正在使用的设备,因为这些年来它们已经变得更好了。你有没有尝试在外面运行你的应用程序,看看锁定是否有所改善?