------------------Mise à JOUR----------------------
Il y a deux point important dans votre question.
1) obtenir le téléphone de coordonnées (qui a été traité dans la première partie de cette réponse)
2) Calculer le réel de la distance entre deux coordonnées
À mon humble avis, le calcul peut être réalisé par un service web: calcul basé uniquement
sur la distance entre deux coordonnées peuvent conduire à vraiment mauvais résultat.
Voici un exemple d'un tel service web
https://graphhopper.com/#directions-api
La démo app: https://graphhopper.com/api/1/examples/
Il est basé sur les flux de trafic (comme beaucoup de ces outils)
Donc, vous devez être prudent avec l'ordre des coordonnées
car elle peut amener un résultat incorrect.
Par exemple avec deux points dans le bon ordre:
Cela donne un bon résultat
Mais si vous donnez des mauvais ordre (avec les mêmes coordonnées)
Pour les mêmes coordonnées, il peut conduire à un niveau extrêmement résultat différent.
Donc pour coordonnées ABCD (en chrnological commande)
ce que vous devez faire:
A->B B->C->D
Graphhopper semble en mesure de le faire hors de la distance de calcul
Voici la lib sur iOS et Android
https://github.com/graphhopper/graphhopper-ios/
https://github.com/graphhopper/graphhopper/tree/master/android
---------------------------------------------------
Vous devez définir la façon dont votre application de fonctionner. De premier plan ou d'arrière-plan?
Comme dit dans d'autres réponses, vous aurez à obtenir la position de l'utilisateur, toutes les X secondes. Puis calculer la distance.
Pour iOS:
- Vous pouvez utiliser les informations sur ce site: http://mobileoop.com/
Il parle de suivi de localisation de l'utilisateur sur iOS lorsque l'application est en arrière-plan.
- Voici le github: https://github.com/voyage11/Location
Ensuite, vous devez convertir le point, grâce à
CLLocationDistance distance = [aCLLocationA distanceFromLocation:aCLLocationB];
Vous pouvez également vérifier cette (d'apple doc) https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html:
Assurez-vous que l'emplacement du gestionnaire de pausesLocationUpdatesAutomatically propriété est définie sur OUI. Lorsque cette propriété est définie sur OUI, l'Emplacement de Noyau pauses emplacement des mises à jour (et les pouvoirs en bas de l'emplacement du matériel) chaque fois que cela a du sens de le faire, par exemple lorsque l'utilisateur est rare d'être en mouvement, de toute façon. (L'Emplacement de noyau aussi une pause à jour quand il ne parvient pas à obtenir une position gps.)
Attribuer une valeur appropriée à l'emplacement d'un gestionnaire de activityType de la propriété. La valeur de cette propriété permet à l'emplacement du gestionnaire de déterminer quand il est sécuritaire de le mettre en pause l'emplacement des mises à jour. Pour une application qui offre tour-par-tour de navigation automobile, la définition de la propriété de CLActivityTypeAutomotiveNavigation provoque l'emplacement gestionnaire de pause événements uniquement lorsque l'utilisateur ne se déplace pas à une distance importante sur une période de temps.
CLActivityTypeAutomotiveNavigation de vous assurer d'obtenir une position qui est sur la route.
Pour Android:
- Vous pouvez utiliser ce projet:
https://github.com/quentin7b/android-location-tracker
Qui peut facilement vous aide à obtenir la position de l'utilisateur thru temps
Grâce à la TrackerSettings objet
TrackerSettings settings =
new TrackerSettings()
.setUseGPS(true)
.setUseNetwork(true)
.setUsePassive(true)
.setTimeBetweenUpdates(30 * 60 * 1000)
.setMetersBetweenUpdates(100);
- Pour trouver la distance entre deux points sur Android, vous pouvez vérifier ceci:
Obtenir la distance entre deux points geo
Les deux OS
Basé sur une position ramassé toutes les X seconde vous avez de réduire le temps entre la cueillette des données de localisation pour améliorer la précision.
Que vous voulez calculer la distance sur une route contexte, le programme d'installation l'Emplacement manager en mode de navigation, ce mode vous donne les coordonnées qui sont sur la route.
Enfin
Si vous voulez améliorer la précision du calcul de la distance,
vous pouvez utiliser une API de google:
https://developers.google.com/maps/documentation/distance-matrix/intro
En définissant le droit mode paramètre:
Les paramètres facultatifs
mode (par défaut à la conduite) - Spécifie le mode de transport à utiliser lors du calcul de la distance. Les valeurs valides et d'autres détails de la demande sont précisées dans les Modes de Déplacement de la section de ce document.