Maison >développement back-end >tutoriel php >Comment calculer avec précision les distances entre les coordonnées géographiques en PHP ?
Mesurer la distance entre les coordonnées en PHP
Introduction
Le calcul de la distance entre les coordonnées géographiques est une tâche fondamentale dans diverses applications. Une approche courante consiste à utiliser la formule Haversine. Cependant, cela peut donner des résultats inexacts, notamment pour les points antipodaux. Cet article explore une méthode alternative utilisant la formule de Vincenty, qui fournit des résultats plus fiables pour toutes les distances.
Implémentation
Le code PHP fourni tente d'implémenter la formule Haversine pour calculer des distances. Cependant, il peut rencontrer des inexactitudes dues à des erreurs d’arrondi lorsqu’il s’agit de grandes distances. Nous vous recommandons plutôt d'utiliser la formule Vincenty, comme indiqué dans l'extrait de code ci-dessous :
public static function vincentyGreatCircleDistance( $latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000) { // Convert from degrees to radians $latFrom = deg2rad($latitudeFrom); $lonFrom = deg2rad($longitudeFrom); $latTo = deg2rad($latitudeTo); $lonTo = deg2rad($longitudeTo); $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; }
Remarque :
Par défaut, la distance est calculée en mètres en utilisant un rayon terrestre de 6371000 mètres. Pour modifier l'unité de mesure, ajustez la valeur de $earthRadius en conséquence.
Gestion des erreurs
Pour les points antipodaux (c'est-à-dire les points situés sur les côtés opposés de la Terre), la formule Vincenty fournit des résultats plus précis que la formule Haversine. Cependant, il est important de noter que les deux formules peuvent rencontrer des erreurs d'arrondi ou produire des résultats inexacts pour de très petites distances.
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!