在 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中文网其他相关文章!