Androïd et les distances
Résolu
Sicey
Messages postés
68
Statut
Membre
-
Sicey Messages postés 68 Statut Membre -
Sicey Messages postés 68 Statut Membre -
Bonjour,
Je suis en train de développer une application pour Android, qui utilise une map. Je souhaite calculer la distance entre 2 géopoints.
Pour celà j'utilise la fonction distanceTo(), dont j'ai étudié la doc (https://developer.android.com/reference/android/location/Location.html#distanceTo(android.location.Location))
Seulement, dans la doc il est écrit que le résultat est en mètres, alors que moi, + je met de la distance entre mes 2 points, moins le résultat est long.
Voilà mon bout de code :
localisation de l'utilisateur :
localisation du point et calcul de la distance :
Le résultat ne correspond pas à la réalité...
J'ai feuilleté les forums sur Internet mais rien ne m'a aidé, j'ai essayé avec et sans la division / 1e6, j'ai essayé avec une conversion miles/mètres au cas où mais rien y fait..
Si quelqu'un a une idée !!!
Merci !
Je suis en train de développer une application pour Android, qui utilise une map. Je souhaite calculer la distance entre 2 géopoints.
Pour celà j'utilise la fonction distanceTo(), dont j'ai étudié la doc (https://developer.android.com/reference/android/location/Location.html#distanceTo(android.location.Location))
Seulement, dans la doc il est écrit que le résultat est en mètres, alors que moi, + je met de la distance entre mes 2 points, moins le résultat est long.
Voilà mon bout de code :
localisation de l'utilisateur :
utilisateur.setLongitude(longitude / 1e6); utilisateur.setLatitude(latitude / 1e6);
localisation du point et calcul de la distance :
d.setLongitude(longitude / 1e6); d.setLatitude(latitude / 1e6); Float distance = IwantIeat.utilisateur.distanceTo(d);
Le résultat ne correspond pas à la réalité...
J'ai feuilleté les forums sur Internet mais rien ne m'a aidé, j'ai essayé avec et sans la division / 1e6, j'ai essayé avec une conversion miles/mètres au cas où mais rien y fait..
Si quelqu'un a une idée !!!
Merci !
A voir également:
- Androïd et les distances
- Android recovery - Guide
- Begone android - Accueil - Protection
- Presse papier android - Guide
- À quoi sert google drive sur android - Guide
- Jouer a pokemon sur android - Guide
1 réponse
Je ne comprends pas tes divisions par 1e6, tu essayes de convertir des kilomètres en mètres ? Les latitudes et les longitudes doivent être données en degrés, c'est du moins ce qu'indique la documentation pour setLongitude(double) et setLatitude(double).
Pour cela tu as une méthode de conversion : Location.convert(String).
Remarque : il serait également bon de ne pas oublier l'altitude (en mètres), même si je n'ai pas l'impression qu'elle rentre en compte dans le calcul de distance.
Remarque : tu peux aussi te servir de la méthode statique Location.distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)
Pour cela tu as une méthode de conversion : Location.convert(String).
Remarque : il serait également bon de ne pas oublier l'altitude (en mètres), même si je n'ai pas l'impression qu'elle rentre en compte dans le calcul de distance.
// Location de l'utilisateur (D : degrés, M:minutes, S:secondes)
utilisateur.setLongitude(Location.convert("DDD:MM:SS.SSSSS"));
utilisateur.setLatitude(Location.convert("[+-]DDD:MM.MMMMM"));
utilisateur.setAltitude(altitude_en_mètres);
d.setLongitude(Location.convert("[+-]DDD.DDDDD"));
d.setLatitude(latitude_en_degrés); // directement un double (risqué !)
d.setAltitude(altitude_en_mètres);
float distance = utilisateur.distanceTo(d); // résultat en mètres
Remarque : tu peux aussi te servir de la méthode statique Location.distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)
float[] results; Location.distanceBetween(Location.convert(...),Location.convert(...),Location.convert(...),Location.convert(...),results); float distance = results[0];La confiance n'exclut pas le contrôle
J'ai testé ta solution mais ça n'a pas résolu mon problème. Je ne peux pas utiliser convert("[+-]DDD:MM.MMMMM") sur une variable de type double, et eclipse ne veut pas caster ici.
Mes valeurs sont toujours aussi farfelues, du genre 5 millions de mètres au lieu d'environ 2km ^^'
En fait mon erreur venait d'éclipse : je dois lancer mon application, envoyer les coordonnées via l'émulator control, fermer l'application, puis la relancer, et là j'ai les bonnes valeurs ! Si je lance directement, la carte se centre sur la dernière place visiter, mais sans avoir de "vraies" coordonnées pour le GPS.
Merci de ton aide en tout cas ! Effectivement il ne fallait pas utiliser /1e6 !! J'ai juste divisé le résultat pour passer de mètres en kilomètres! Thanks !