PHP中两个坐标之间的距离
我已经测试了以下用于测量两个坐标之间距离的函数:PHP中两个坐标之间的距离,php,Php,我已经测试了以下用于测量两个坐标之间距离的函数: <?php $var1 = vincentyGreatCircleDistance(500359,0054253,583838,0030412,6371000); echo "$var1" ; $var2 = distance(500359,0054253,583838,0030412,'K'); echo "<br>$var2" ; function distance($lat1, $lon1, $lat2, $lon2
<?php
$var1 = vincentyGreatCircleDistance(500359,0054253,583838,0030412,6371000);
echo "$var1" ;
$var2 = distance(500359,0054253,583838,0030412,'K');
echo "<br>$var2" ;
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344);
} else if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}
function vincentyGreatCircleDistance(
$latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000)
{
// convert from degrees to radians
$latFrom = deg2rad($latitudeFrom);
$lonFrom = deg2rad($longitudeFrom);
$latTo = deg2rad($latitudeTo);
$lonTo = deg2rad($longitudeTo);
$lonDelta = $lonTo - $lonFrom;
$a = pow(cos($latTo) * sin($lonDelta), 2) +
pow(cos($latFrom) * sin($latTo) - sin($latFrom) * cos($latTo) * cos($lonDelta), 2);
$b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta);
$angle = atan2(sqrt($a), $b);
return $angle * $earthRadius;
}
?>
但是第一个函数返回5120227.5400291,第二个函数返回5119.9812014323!
我很困惑,因为以下站点返回5363公里:
哪一个是正确的
资料来源:
第一个功能:
第二个功能:
第一个看起来好像缺少了a/1000,第二个假设地球是一个球体,而不是。参考站点可能使用了更精确的地球模型,因此存在差异——特别是在如此大的距离上。我想使用其中一个!但是哪一个根据您在问题中指出的标准,它们都是不正确的。为什么您希望使用不正确的代码?如果你认为“5363公里”的值是正确的,你需要确定使用什么算法来生成这个数字并模仿它。