Maison > développement back-end > tutoriel php > Comment puis-je calculer avec précision la distance entre deux coordonnées en PHP ?

Comment puis-je calculer avec précision la distance entre deux coordonnées en PHP ?

Linda Hamilton
Libérer: 2024-12-03 14:48:10
original
671 Les gens l'ont consulté

How Can I Accurately Calculate the Distance Between Two Coordinates in PHP?

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal