математика — PHP: формула 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;
}

1

Решение

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;
}

Значение 6371 для $earthMeanRadius Аргумент (который является значением по умолчанию) — это средний радиус Земли в километрах, что означает, что возвращаемый результат будет в километрах …. если вы хотите использовать мили, вместо этого назовите их с помощью $earthMeanRadius значение аргумента 3958; если хотите морские мили, измените их на 3440 и т. д.

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]