Maison  >  Article  >  Java  >  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 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 01:48:28967parcourir

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

Présentation des calculs de distance basés sur la latitude et la longitude

Calculer la distance entre deux points de la surface de la Terre en utilisant leurs coordonnées de latitude et de longitude est un tâche fondamentale dans diverses applications. Ci-dessous, nous explorerons les subtilités du calcul de cette distance à l'aide d'un extrait de code Java et nous plongerons dans une implémentation améliorée qui prend en compte les différences d'altitude.

Calcul de la distance à l'aide d'un extrait de code Java

Le code fourni par Dommer utilise une formule simplifiée pour calculer la distance entre deux points à la surface de la Terre :

<code class="java">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>

Cette formule suppose une Terre sphérique et donne des résultats raisonnables pour de petites distances. Cependant, il ne prend pas en compte les différences d'altitude, ce qui peut entraîner des inexactitudes sur des distances importantes.

Présentation de la formule Haversine pour le calcul de distance en fonction de l'altitude

Pour remédier aux limitations De la formule utilisée par Dommer, nous nous tournons vers la formule de Haversine, qui intègre un modèle plus précis pour représenter la forme de la Terre. Cette formule prend explicitement en compte la distance et la différence de hauteur entre les deux points :

<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>

Cette formule fournit une représentation plus précise de la distance, ce qui la rend utile pour les applications nécessitant des calculs géographiques précis.

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