J'essaie de calculer la distance entre deux points de latitude / longitude. J'ai un morceau de code qui fonctionne principalement que j'ai extrait de ce post mais je ne comprends pas vraiment comment cela fonctionne.
Voici le code:
<?php
// POINT 1
$thisLat = deg2rad(44.638);
$thisLong = deg2rad(-63.587);
// POINT 2
$otherLat = deg2rad(44.644);
$otherLong = deg2rad(-63.911);
$MeanRadius = 6378 - 21 * sin($lat1);
$xa = (Cos($thisLat)) * (Cos($thisLong));
$ya = (Cos($thisLat)) * (Sin($thisLong));
$za = (Sin($thisLat));
$xb = (Cos($otherLat)) * (Cos($otherLong));
$yb = (Cos($otherLat)) * (Sin($otherLong));
$zb = (Sin($otherLat));
$distance = $MeanRadius * Acos($xa * $xb + $ya * $yb + $za * $zb);
echo $distance;
?>
J'ai quelques questions:
- que sont xa, ya, za? Je comprends que ce sont des points sur un plan cartésien 3D mais où sont-ils par rapport? Le centre de la terre?
- Comment cela
cos($xa * $xb + $ya * $yb + $za * $zb)
calcule- t-il la distance entre les points? Je sais qu'en 2D je ferais ceci:
Pythagorean Theorem
distance^2 = b^2 + a^2
distance = sqr((y2-y1)^2 + (x2 - x1)^2)
- Quelle sera la précision? Il y a eu une discussion à ce sujet sur l'autre page. Mais je veux spécifiquement utiliser la distance pour dire si les utilisateurs sont à quelque chose comme 10 m, 20 m ou 50 m l'un de l'autre. Pourrai-je le faire avec une bonne précision?
- Que dois-je utiliser
$MeanRadius
? Est-ce une valeur raisonnable? Je pense que cette valeur suppose que la terre est une élipse.
la source