Abh*_*hek 1 php math maps latitude-longitude haversine
为什么Haversine公式会返回很远的距离?根据我通过的值,距离不应超过1或2公里.但它返回8,104公里.
我知道这是PHP经常出现的问题.
感谢这里的代码片段:
function haversineGreatCircleDistance(
$latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371)
{
// convert from degrees to radians
$latFrom = deg2rad($latitudeFrom);
$lonFrom = deg2rad($longitudeFrom);
$latTo = deg2rad($latitudeTo);
$lonTo = deg2rad($longitudeTo);
$latDelta = $latTo - $latFrom;
$lonDelta = $lonTo - $lonFrom;
$angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
return $angle * $earthRadius;
}
Run Code Online (Sandbox Code Playgroud)
function haversineGreatCircleDistance(
$latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthMeanRadius = 6371)
{
$deltaLatitude = deg2rad($latitudeTo - $latitudeFrom);
$deltaLongitude = deg2rad($longitudeTo - $longitudeFrom);
$a = sin($deltaLatitude / 2) * sin($deltaLatitude / 2) +
cos(deg2rad($latitudeFrom)) * cos(deg2rad($latitudeTo)) *
sin($deltaLongitude / 2) * sin($deltaLongitude / 2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
return $earthMeanRadius * $c;
}
Run Code Online (Sandbox Code Playgroud)
参数的值为6371 $earthMeanRadius
(默认值)是以千米为单位的地球平均半径,这意味着返回的结果将以千米为单位....如果您想要里程,则使用$earthMeanRadius
参数值3,958 调用它; 如果您想要海里,请将其更改为3440等.