Estoy intentando calcular la distancia entre dos puntos de latitud / longitud. Tengo un código que funciona principalmente que saqué de esta publicación, pero realmente no entiendo cómo funciona.
Aquí está el 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;
?>
Tengo un par de preguntas:
- ¿Qué son xa, ya, za? Entiendo que son puntos en un plano cartesiano 3D, pero ¿a dónde están relacionados? El centro de la tierra?
- ¿Cómo
cos($xa * $xb + $ya * $yb + $za * $zb)
calcula esto la distancia entre los puntos? Sé que en 2D haría esto:
Pythagorean Theorem
distance^2 = b^2 + a^2
distance = sqr((y2-y1)^2 + (x2 - x1)^2)
- ¿Qué tan exacto será esto? Hubo alguna discusión sobre eso en la otra página. Pero específicamente quiero usar la distancia para saber si los usuarios están dentro de algo así como 10m, 20m o 50m entre sí. ¿Podré hacer esto con buena precisión?
- ¿Para qué debo usar
$MeanRadius
? ¿Es ese un valor razonable? Creo que ese valor supone que la tierra es una elipse.
fuente