我正在尝试计算两个纬度/经度点之间的距离。我有一段代码大部分都是我从这篇文章中摘录的,但是我不太了解它是如何工作的。
这是代码:
<?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是什么?我知道它们是3D笛卡尔平面上的点,但是它们相对于哪里?地球的中心?
- 这如何
cos($xa * $xb + $ya * $yb + $za * $zb)
计算点之间的距离?我知道在2D模式下我会这样做:
Pythagorean Theorem
distance^2 = b^2 + a^2
distance = sqr((y2-y1)^2 + (x2 - x1)^2)
- 这将有多精确?在另一页上对此进行了一些讨论。但是我特别想使用距离来判断用户是否位于彼此之间10m,20m或50m之内。我可以做到这一点吗?
- 我应该做什么用
$MeanRadius
?这个值合理吗?我认为该值假定地球是椭圆形。