Androïd et les distances

Résolu/Fermé
Sicey Messages postés 57 Date d'inscription mardi 18 mai 2010 Statut Membre Dernière intervention 4 décembre 2012 - 3 déc. 2012 à 18:48
Sicey Messages postés 57 Date d'inscription mardi 18 mai 2010 Statut Membre Dernière intervention 4 décembre 2012 - 4 déc. 2012 à 09:42
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 :
	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:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 3/12/2012 à 19:51
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.

// 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
0
Sicey Messages postés 57 Date d'inscription mardi 18 mai 2010 Statut Membre Dernière intervention 4 décembre 2012 1
3 déc. 2012 à 20:11
Okay merci ! J'ai ajouté les divisions suite à la lecture d'un post sur un forum, quelqu'un pour qui ça avait fonctionné je ne sais comment.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
3 déc. 2012 à 20:17
S'il y a des divisions à faire ce serait pour faire manuellement les conversions d'angles, mais ce serait plutôt des divisions par 60 (minutes→degrés) ou 3600 (secondes→degrés)
0
Sicey Messages postés 57 Date d'inscription mardi 18 mai 2010 Statut Membre Dernière intervention 4 décembre 2012 1
4 déc. 2012 à 09:00
Bonjour,

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 ^^'
0
Sicey Messages postés 57 Date d'inscription mardi 18 mai 2010 Statut Membre Dernière intervention 4 décembre 2012 1
4 déc. 2012 à 09:42
J'ai trouvé !
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 !
0