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!