Estou tentando calcular a distância entre dois pontos de latitude / longitude. Eu tenho um pedaço de código que funciona principalmente que tirei deste post, mas realmente não entendo como ele funciona.
Aqui está o código:
<?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;
?>
Eu tenho algumas perguntas:
- o que são xa, ya, za? Eu entendo que eles são pontos em um plano cartesiano 3D, mas onde eles são relativos? O centro da terra?
- Como isso
cos($xa * $xb + $ya * $yb + $za * $zb)
calcula a distância entre os pontos? Eu sei que em 2D eu faria isso:
Pythagorean Theorem
distance^2 = b^2 + a^2
distance = sqr((y2-y1)^2 + (x2 - x1)^2)
- Quão preciso isso será? Houve alguma discussão sobre isso na outra página. Mas, especificamente, quero usar a distância para saber se os usuários estão dentro de algo como 10m, 20m ou 50m um do outro. Serei capaz de fazer isso com boa precisão?
- Para que devo usar
$MeanRadius
? Isso é um valor razoável? Eu acho que esse valor assume que a Terra é uma elipse.
fonte