Maison >Java >javaDidacticiel >Comment calculer la distance entre deux points sur Terre en utilisant la latitude et la longitude ?

Comment calculer la distance entre deux points sur Terre en utilisant la latitude et la longitude ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 13:39:02355parcourir

How to Calculate the Distance Between Two Points on Earth Using Latitude and Longitude?

Latitude et longitude : calculer la distance entre deux points

Le calcul de la distance entre deux points du globe nécessite la connaissance de leurs latitudes et longitudes. Bien que de nombreuses solutions existent, une méthode précise pour déterminer la distance entre deux coordonnées est la formule Haversine.

Une implémentation Java de la méthode Haversine, fournie par Dommer, est :

<code class="java">final double RADIUS = 6371.01;
double temp = Math.cos(Math.toRadians(latA))
            * Math.cos(Math.toRadians(latB))
            * Math.cos(Math.toRadians((latB) - (latA)))
            + Math.sin(Math.toRadians(latA))
            * Math.sin(Math.toRadians(latB));
    return temp * RADIUS * Math.PI / 180;</code>

Cependant , de petites erreurs peuvent s'accumuler lors de l'utilisation de cette méthode pour des ensembles de données volumineux tels que les traces GPS.

Une implémentation améliorée qui prend également en compte les différences de hauteur entre les points est :

<code class="java">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);
}</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn