Quelle api pour un calcul de distance [Fermé]

Signaler
Messages postés
7
Date d'inscription
vendredi 15 mai 2015
Statut
Membre
Dernière intervention
5 décembre 2017
-
Messages postés
1207
Date d'inscription
vendredi 17 juin 2011
Statut
Membre
Dernière intervention
15 novembre 2018
-
Bonjour à tous,

Je dois dans mon application calculer la distance entre deux coordonnées géographiques (lat/long). Vers quelle api google dois-je m'orienter ?
Comment cela fonctionne t-il ?

Merci d'avance.

3 réponses

Messages postés
16366
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
22 juin 2021
2 849
Bonjour,

Est-ce qu'il y a vraiment besoin d'importer une bibliothèque entière juste pour une formule de maths qui tient sur une ligne ? (question rhétorique)

https://www.google.fr/#q=latitude+longitude+distance

distance = acos(sin(x1)*sin(y1)+cos(x1)*cos(y1)*cos(x2-y2))*6371

Avec (x1,y1) et (x2,y2) les coordonnées en radians, le résultat est en km.
Messages postés
7
Date d'inscription
vendredi 15 mai 2015
Statut
Membre
Dernière intervention
5 décembre 2017

Effectivement, a tester voir si le résultat est suffisament précis.
Merci KX
Messages postés
15067
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 juin 2021
3 414
Hello,

L'objet Location te permet de récupérer la distance entre 2 positions facilement
Messages postés
1207
Date d'inscription
vendredi 17 juin 2011
Statut
Membre
Dernière intervention
15 novembre 2018
163
Lut,

Si tu veux aussi prendre en compte la hauteur des points (altitude) :

public static double distance(double lat1, double lat2, double lon1,
        double lon2, double el1, double el2) {

    final int R = 6371; // Radius of the earth

    Double latDistance = Math.toRadians(lat2 - lat1);
    Double lonDistance = Math.toRadians(lon2 - lon1);
    Double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2)
            + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
            * Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2);
    Double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double distance = R * c * 1000; // convert to meters

    double height = el1 - el2;

    distance = Math.pow(distance, 2) + Math.pow(height, 2);

    return Math.sqrt(distance);
}

lat, lon, el = latitude, longitude, hauteur
Si tu ne veux pas utiliser la hauteur, suffit de fixer el1 et el2 à 0 lors de l'appel (d'ailleurs peu importe, tant que el1 = el2)