Точный путь к карте с использованием iOS Core Location - PullRequest
0 голосов
/ 05 июля 2019

Я рисую путь перемещения пользователя в GMSMapView. Когда пользователь ездит или ходит, путь достаточно точен, но при работе (пребывании) в здании в течение нескольких часов я получаю очень неточные значения местоположения. Смотрите прикрепленный скриншот:

enter image description here.

Ниже приведен код, который я использую:

    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
    }

Я пытался отфильтровать данные о местоположении, но я все еще получаю очень неточные значения. Любые предложения приветствуются.

...