PHP根据两点经纬度计算距离
本文演示如何利用PHP语言的Haversine(半正矢)公式,编写一个计算地球表面两点间距离的自定义函数。通过传入起始与终点的经纬度数值,可快速获得两地间的近似直线距离。
Haversine 公式原理概述
在地理信息处理中,若需计算地球表面上两个坐标点之间的距离,通常采用 Haversine(半正矢)公式。该算法基于球面三角学原理,将地球视为一个完美球体,能够以较高的精度估算两点间的弧长距离。相比简单的平面勾股定理,此方法能显著减少因地球曲率带来的测量误差。
PHP 距离计算函数实现
下面提供完整的 PHP 函数代码。该函数接收四个浮点数参数:起点纬度 ($lat1)、起点经度 ($lng1)、终点纬度 ($lat2) 和终点经度 ($lng2)。核心逻辑是将角度转换为弧度,代入数学公式进行求解,最终返回取整后的距离值。
/**
* @desc 根据两点间的经纬度计算距离
* @param float $lat1 起点纬度
* @param float $lng1 起点经度
* @param float $lat2 终点纬度
* @param float $lng2 终点经度
* @return int 距离(单位:米)
*/
function getDistance($lat1, $lng1, $lat2, $lng2)
{
// 定义地球半径为约 6367000 米
$earthRadius = 6367000;
/*
* 将度数转换为弧度
* 用于配合数学公式进行运算
*/
$lat1 = ($lat1 * pi() ) / 180;
$lng1 = ($lng1 * pi() ) / 180;
$lat2 = ($lat2 * pi() ) / 180;
$lng2 = ($lng2 * pi() ) / 180;
/*
* 使用 Haversine 公式 (Haversine formula)
*
* 参考: http://en.wikipedia.org/wiki/Haversine_formula
*
* 计算两点间的弧长距离
*/
$calcLongitude = $lng2 - $lng1;
$calcLatitude = $lat2 - $lat1;
$stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);
$stepTwo = 2 * asin(min(1, sqrt($stepOne)));
$calculatedDistance = $earthRadius * $stepTwo;
return round($calculatedDistance);
}
函数参数说明与注意事项
- $earthRadius: 代码中设定的地球平均半径为 6,367,000 米。这是一个简化值,实际地球形状接近椭球体,因此计算结果属于“大圆距离”估算,对于日常应用或短途导航已足够精准。
- 返回值: 函数经过
round()处理,最终输出单位为米的整数。若需千米级别,可将结果除以 1000。 - 参数顺序: 调用时请严格对应经纬度位置。通常情况下,北京等坐标体系的 WGS84 格式遵循 "纬度在前,经度在后" 的原则。
总结
上述代码提供了一个轻量且高效的解决方案,帮助开发者解决基于经纬度的空间距离测算问题。无需依赖庞大的第三方地图 SDK,只需几行 PHP 代码即可完成基础的空间分析计算。以上就是根据两点经纬度计算距离的详细内容,更多关于PHP地理位置处理技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













