2013-08-11 1 views
0

J'ai fait une application calculant la distance lors de la marche/course pour iPhone.Mapkit et didUpdateToLocation - calculer la précision de la distance sur iOS

J'ai comparé mon application à une autre application en cours d'exécution, et personne ne donne la même distance.

GPS Nike: 2,1 km
Runtastic: 2,5 km
My App: 2,9 km

Voici le routage pour calculer la distance:

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 

{ 
float distInMeter = [newLocation distanceFromLocation:oldLocation]; // which returns in meters 
} 

et je concaténer distInMeters à une autre variable.

Pourquoi existe-t-il une telle différence entre ces applications? Existe-t-il un autre moyen de calculer la distance plus précisément?

Merci pour votre aide.

Répondre

0

Une telle différence peut survenir en raison de la façon dont le gestionnaire de position délivre les positions des utilisateurs. Disons que vous marchez dans une certaine direction et que le GPS vous donne une position totalement hors de cette direction, mais le suivant est à nouveau sur la bonne voie. Si vous prenez en compte celui qui était désactivé, vous comptabilisez plus de distance que l'utilisateur réellement voyagé. Donc, vous devriez filtrer celui-là.

Même chose si le GPS vous donne une autre position qui est plus éloignée qu'elle ne devrait l'être. Disons que l'utilisateur fait du jogging à 4 mi/h, il serait donc impossible que l'utilisateur démarre soudainement à 100 mi/h, alors vous devriez filtrer celui-là aussi. Fondamentalement, vous devriez filtrer ceux qui sont très peu susceptibles de se produire, et ainsi vous obtiendrez une distance plus précise.

+0

Merci pour votre réponse ... Peut-être que je peux calculer la distance entre 2 lieux changés (et pas à chaque changement?). Peut-être ne considère pas l'emplacement suivant qui est plus que deux fois la distance, etc ... –

1

Ces applications ont travaillé avec des données GPS inexactes pendant une longue période et ont créé des moyens pour lisser les sauts aléatoires dans l'emplacement. Votre implémentation ne prend pas en compte les anciennes données ou les données fausses.

Vous pouvez essayer la mise en œuvre d'un Ramer–Douglas–Peucker algorithm (here's one in Javascript) ou lire certains de ces verycomplicated papers, ou vous pouvez simplement jeter les relevés GPS anciens ou très différents et attendre une lecture plus précise entre en jeu.

0

généralistes postes doivent être filtré avant de calculer les distances. vous ne pouvez pas simplement résumer toutes les distances entre chaque emplacement. votre fonction de distance est correcte, mais pas votre filtrage. il suffit de visualiser tous les points sur la carte (mkMapView), puis vous voyez qu'à faible vitesse, gps crée des lignes d'erreur aléatoires en zigzag. à partir de cette visualisation, vous devriez clairement voir pourquoi vos distances sont beaucoup plus grandes.

Questions connexes