PHP根据经纬度获取两个地点之间的直线距离

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
 * 根据两点间的经纬度计算距离
 * @param $lat1 纬度1
 * @param $lng1 经度1
 * @param $lat2 纬度2
 * @param $lng2 经度2
 * @return array
 */
function get_distance($lat1, $lng1, $lat2, $lng2): array
{
    //赤道半径(单位m)
    $earthRadius = 6378137;
    $lat1        = ($lat1 * pi()) / 180;
    $lng1        = ($lng1 * pi()) / 180;
 
    $lat2 = ($lat2 * pi()) / 180;
    $lng2 = ($lng2 * pi()) / 180;
 
    $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 = abs(round(($earthRadius * $stepTwo), 2));
    //千米
    $calculatedDistanceKm = abs(round(($calculatedDistance / 1000), 2));
    if ($calculatedDistanceKm >= 1) {
        if ($calculatedDistanceKm > 999) {
            $distance_str = ">999 km";
        } else {
            $distance_str = $calculatedDistanceKm . " km";
        }
    } else {
        $distance_str = $calculatedDistance . " m";
    }
    return [
        'distance'     => $calculatedDistance,
        'distance_str' => $distance_str,
    ];
}

  

posted @   橙子与柠檬  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示