Próbuję obliczyć odległość między dwoma punktami szerokość / długość geograficzna. Mam kawałek kodu, który w większości działa, który wyrwałem z tego postu, ale tak naprawdę nie rozumiem, jak to działa.
Oto kod:
<?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;
?>
Mam kilka pytań:
- jakie są xa, ya, za? Rozumiem, że są to punkty na kartezjańskiej płaszczyźnie 3D, ale gdzie się odnoszą? Centrum ziemi?
- Jak to
cos($xa * $xb + $ya * $yb + $za * $zb)
oblicza odległość między punktami? Wiem, że w 2D zrobiłbym to:
Pythagorean Theorem
distance^2 = b^2 + a^2
distance = sqr((y2-y1)^2 + (x2 - x1)^2)
- Jak dokładne to będzie? Na drugiej stronie była dyskusja na ten temat. Ale szczególnie chcę użyć odległości, aby stwierdzić, czy użytkownicy znajdują się w odległości około 10, 20 lub 50 metrów od siebie. Czy będę w stanie to zrobić z dobrą dokładnością?
- Do czego mam używać
$MeanRadius
? Czy to rozsądna wartość? Myślę, że ta wartość zakłada, że Ziemia jest elipsą.
źródło