Mesurer la distance entre deux coordonnées en PHP avec précision
Calculer la distance entre deux points de la surface de la Terre nécessite de la précision, surtout lorsqu'elle est astronomique les distances sont impliquées. La formule Haversine est une méthode populaire pour de tels calculs, mais sa mise en œuvre dans le code fourni semble donner des résultats inexacts.
Considérations sur la formule Haversine
La formule Haversine utilise des formules sphériques trigonométrie pour estimer la distance entre deux coordonnées géographiques. Bien qu'il fournisse des approximations précises pour les courtes distances, il devient moins fiable pour les distances extrêmes (par exemple, près des antipodes).
Formule de calcul alternative : Vincenty
Pour surmonter les Limites de la formule Haversine, en particulier pour les calculs de distance à grande échelle, la formule Vincenty offre une précision améliorée. Il utilise des méthodes itératives pour calculer la distance géodésique le long de l'ellipsoïde qui se rapproche de la surface de la Terre.
Implémentation
Vous trouverez ci-dessous une implémentation de la formule Vincenty en PHP :
function vincentyGreatCircleDistance($latFrom, $lonFrom, $latTo, $lonTo, $earthRadius = 6371000) { // Convert to radians $latFrom = deg2rad($latFrom); $lonFrom = deg2rad($lonFrom); $latTo = deg2rad($latTo); $lonTo = deg2rad($lonTo); $lonDelta = $lonTo - $lonFrom; $a = pow(cos($latTo) * sin($lonDelta), 2) + pow(cos($latFrom) * sin($latTo) - sin($latFrom) * cos($latTo) * cos($lonDelta), 2); $b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta); $angle = atan2(sqrt($a), $b); return $angle * $earthRadius; }
Cette implémentation génère la distance en mètres, cohérente avec l'entrée $earthRadius. Pour les miles, vous pouvez parcourir 3959 miles avec le paramètre $earthRadius. L'utilisation de la formule Vincenty garantit des calculs de distance fiables, même pour les distances extrêmes.
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!