Я пытаюсь рассчитать расстояние между двумя точками широты и долготы. У меня есть фрагмент кода, который в основном работает, который я вытащил из этого поста, но я не очень понимаю, как он работает.
Вот код:
<?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;
?>
У меня есть пара вопросов:
- Что такое XA, YA, ZA? Я понимаю, что это точки на трехмерной декартовой плоскости, но где они относительно? Центр земли?
- Как это
cos($xa * $xb + $ya * $yb + $za * $zb)
рассчитать расстояние между точками? Я знаю, что в 2D я бы сделал это:
Pythagorean Theorem
distance^2 = b^2 + a^2
distance = sqr((y2-y1)^2 + (x2 - x1)^2)
- Насколько точным это будет? На другой странице было обсуждение этого вопроса. Но я специально хочу использовать расстояние, чтобы определить, находятся ли пользователи на расстоянии около 10 м, 20 м или 50 м друг от друга. Смогу ли я сделать это с хорошей точностью?
- Что я должен использовать для
$MeanRadius
? Это разумная ценность? Я думаю, что это значение предполагает, что земля является эллипсом.
источник