首页 >后端开发 >php教程 >如何在PHP中准确计算地理坐标之间的距离?

如何在PHP中准确计算地理坐标之间的距离?

DDD
DDD原创
2024-12-06 14:51:10967浏览

How to Accurately Calculate Distances Between Geographical Coordinates in PHP?

在 PHP 中测量坐标之间的距离

简介

计算地理坐标之间的距离为各种应用中的基本任务。一种常见的方法是采用半正矢公式。然而,它可能会产生不准确的结果,特别是对于对映点。本文探讨了使用文森蒂公式的替代方法,该方法为所有距离提供更可靠的结果。

实现

提供的 PHP 代码尝试实现半正弦公式计算距离。然而,在处理大距离时,由于舍入误差,它可能会遇到不准确的情况。相反,我们建议使用 Vincenty 公式,如下面的代码片段所示:

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

注意:

默认情况下,距离以米为单位计算:地球半径6371000米。要更改测量单位,请相应地调整 $earthRadius 的值。

错误处理

对于对映点(即地球两侧的点),与半正矢公式相比,文森蒂公式提供了更准确的结果。但是,请务必注意,这两个公式都可能遇到舍入误差或对于非常小的距离产生不准确的结果。

以上是如何在PHP中准确计算地理坐标之间的距离?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn