Я рисую путь перемещения пользователя в GMSMapView. Когда пользователь ездит или ходит, путь достаточно точен, но при работе (пребывании) в здании в течение нескольких часов я получаю очень неточные значения местоположения. Смотрите прикрепленный скриншот:
.
Ниже приведен код, который я использую:
var isFirstLocationUpdate = true
var previousLocation: CLLocation?
let locationManager = CLLocationManager()
public func setupLocationSettings()
{
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = 50
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
guard let location = locations.last else
{
return
}
if locationValid(location)
{
previousLocation = location
saveLocation(location)
}
}
func locationValid(_ location: CLLocation) -> Bool
{
guard !isFirstLocationUpdate else
{
isFirstLocationUpdate = false
return true
}
let age = location.timestamp.timeIntervalSinceNow
if abs(age) >= 10 //seconds
{
return false
}
if location.horizontalAccuracy < 0 || location.horizontalAccuracy > 50
{
return false
}
if let prevLocation = previousLocation
{
let distance = location.distance(from: prevLocation)
let noiseFactor = 0.5
if distance >= location.horizontalAccuracy * noiseFactor
{
return true
}
else
{
return false
}
}
return true
}
Я пытался отфильтровать данные о местоположении, но я все еще получаю очень неточные значения. Любые предложения приветствуются.