PHP根据两点经纬度计算距离

追风的人
追风的人
发布时间:2026-10-15 | 5人浏览过
原创

本文演示如何利用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地理位置处理技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表