地图上的当前位置不准确。 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
}
}
我正在开发需要准确当前位置的应用程序。当我在 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
}
}