2017-06-07 2 views
1

J'utilise CLLocationManager dans mon application iOS pour obtenir l'emplacement actuel de l'utilisateur.le gestionnaire de localisation ne peut pas obtenir la vitesse dans ios

J'ai également besoin de calculer la vitesse de l'utilisateur et je l'ai eu, il peut être calculé en utilisant la méthode déléguée "didUpdateLocations".

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    let location: CLLocation = locations.last! 
    var speed1 = location.speed 
    speedLabel.text = "\(speed1)" 
} 

Je peux obtenir la mise à jour de l'emplacement actuel de l'utilisateur mais la valeur de vitesse n'est pas correcte. Initialement, la valeur de la vitesse est -1, puis aucun changement dans la valeur, même si l'emplacement est mis à jour correctement.

L'initialisation de mon manager emplacement est au-dessous

var locationManager = CLLocationManager() 
    locationManager.delegate = self; 
    locationManager.distanceFilter = kCLLocationAccuracyNearestTenMeters; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.requestAlwaysAuthorization() 
    locationManager.startUpdatingLocation() 

Quel mal avec elle.

grâce avancée ..

+0

https://stackoverflow.com/a/32872002/5501940 –

+0

Il est le comportement par défaut et vous devez gérer cela sur votre posséder. Il existe de nombreux mécanismes de filtrage pour contourner ce problème, comme le filtre kalman. –

Répondre

1

En général, en traitant des événements externes et accessoires (localisation, communication de matériel, etc.) Apple vous donnera -1 lorsque les informations que vous voulez est pas calculable ou est en quelque sorte invalide. Vous ne pouvez faire aucune supposition, vous devez simplement intercepter cette information (erreur de calcul quelconque) et la traiter comme si l'information manquait.

Une valeur négative indique une vitesse invalide

https://developer.apple.com/documentation/corelocation/cllocation/1423798-speed