地图上的当前位置不准确。 didUpdateLocations iPhone

Current location on maps is not accurate. didUpdateLocations iPhone

我正在开发需要准确当前位置的应用程序。当我在 iOS 应用程序的户外时,当前位置工作正常。但是当我在建筑物内时,当前位置不准确。它离我的确切位置有100米。

位置管理器设置如下:

 locationManager.desiredAccuracy = kCLLocationAccuracyBest
 locationManager.distanceFilter = 100
 locationManager.allowsBackgroundLocationUpdates = true

我正在调用此函数进行位置更新:

  func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let location: CLLocation = locations.last!
    self.updatedLocation = location    
}

当前位置在建筑物中的 Android 设备上工作正常。 我观察到的一件事是,当我打开 Apple 地图和 Google 地图应用程序时,当前 位置与我在我的应用程序中获取的位置相同,但它们有一个浅蓝色圆圈,表明您可能在该区域附近的任何地方。

当我在建筑物内时,是否可以改进当前位置?

如有任何帮助,我们将不胜感激。

第一张图片是来自 iOS 的屏幕截图,其中当前位置不准确,第二张图片是来自 Android 设备的屏幕截图,其中位置是准确的。

我也注意到了这个问题,尤其是在找到我的 iphone 时,当我在建筑物中时,我的 phone 的位置总是在 50-100 米之外,我没有知道为什么了。

目前我正在开发一款需要确切位置的应用程序,因此您可以做的一件事是检查您正在访问的 CLLocation 上的 horizontalAccuracy 属性回来。如果这高于某个阈值,那么您可以丢弃结果并等待更准确的结果。如果它在数英里外,那么我预计准确度数字会非常大。最有可能使用手机站点而不是 GPS 来确定位置,并且误差范围会大得多。

这是我自己的应用程序的示例:

    func requestUserLocation(){
        
        self.locationManager.delegate = self
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
        self.locationManager.distanceFilter = kCLDistanceFilterNone
        self.locationManager.requestWhenInUseAuthorization()
        self.locationManager.startUpdatingLocation()
    }

然后在 didUpdateLocations 功能上我会进行检查

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

manager.desiredAccuracy = 1000 // 1km accuracy

if locations.last!.horizontalAccuracy > manager.desiredAccuracy {
    // This location is inaccurate. Throw it away and wait for the next call to the delegate.
    print("i don't want this location")
    return;
}
// This is where you do something with your location that's accurate enough.
guard let userLocation = locations.last else {
    print("error getting user location")
    return
}
}