php经纬度怎么算距离

不及物动词 其他 640

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    PHP经纬度怎么算距离?

    在PHP中,计算经纬度之间的距离可以使用Haversine公式或Vincenty公式。下面分别介绍这两种方法的实现。

    1. Haversine公式
    Haversine公式是一种简化的计算地球上两点之间距离的方法,适用于短距离计算。该公式的原理是根据点与地球中心的夹角来计算距离。

    “`php
    function distanceHaversine($lat1, $lon1, $lat2, $lon2) {
    $earthRadius = 6371; // 地球半径,单位为千米
    $dLat = deg2rad($lat2 – $lat1);
    $dLon = deg2rad($lon2 – $lon1);
    $a = sin($dLat / 2) * sin($dLat / 2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon / 2) * sin($dLon / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 – $a));
    $distance = $earthRadius * $c;
    return $distance;
    }
    “`

    使用示例:

    “`php
    $lat1 = 39.904202;
    $lon1 = 116.407394;
    $lat2 = 31.230393;
    $lon2 = 121.473704;

    $distance = distanceHaversine($lat1, $lon1, $lat2, $lon2);
    echo “两点之间的距离为:” . round($distance, 2) . “千米”;
    “`

    2. Vincenty公式
    Vincenty公式是一种更精确的计算地球上两点之间距离的方法,适用于长距离计算。该公式考虑了地球的椭球形状,并考虑了地球离正球体的偏离程度。

    “`php
    function distanceVincenty($lat1, $lon1, $lat2, $lon2) {
    $earthRadius = 6371; // 地球半径,单位为千米
    $a = 6378137; // 长半轴
    $b = 6356752.3142; // 短半轴
    $f = 1 / 298.257223563; // 扁率
    $L = deg2rad($lon2 – $lon1);
    $U1 = atan((1 – $f) * tan(deg2rad($lat1)));
    $U2 = atan((1 – $f) * tan(deg2rad($lat2)));
    $sinU1 = sin($U1);
    $cosU1 = cos($U1);
    $sinU2 = sin($U2);
    $cosU2 = cos($U2);

    $lambda = $L;
    $lambdaP = 2 * pi();
    $iterLimit = 100;
    while (abs($lambda – $lambdaP) > 1e-12 && $iterLimit > 0) {
    $sinLambda = sin($lambda);
    $cosLambda = cos($lambda);
    $sinSigma = sqrt(($cosU2 * $sinLambda) * ($cosU2 * $sinLambda) + ($cosU1 * $sinU2 – $sinU1 * $cosU2 * $cosLambda) * ($cosU1 * $sinU2 – $sinU1 * $cosU2 * $cosLambda));
    if ($sinSigma == 0) {
    return 0; // 两点重合
    }
    $cosSigma = $sinU1 * $sinU2 + $cosU1 * $cosU2 * $cosLambda;
    $sigma = atan2($sinSigma, $cosSigma);
    $sinAlpha = ($cosU1 * $cosU2 * $sinLambda) / ($sinSigma);
    $cosSqAlpha = 1 – $sinAlpha * $sinAlpha;
    $cos2SigmaM = $cosSigma – 2 * ($sinU1 * $sinU2) / $cosSqAlpha;
    $C = $f / 16 * $cosSqAlpha * (4 + $f * (4 – 3 * $cosSqAlpha));
    $lambdaP = $lambda;
    $lambda = $L + (1 – $C) * $f * $sinAlpha * ($sigma + $C * $sinSigma * ($cos2SigmaM + $C * $cosSigma * (-1 + 2 * $cos2SigmaM * $cos2SigmaM)));
    $iterLimit–;
    }

    if ($iterLimit == 0) {
    return false; // 计算失败
    }

    $uSq = $cosSqAlpha * ($a * $a – $b * $b) / ($b * $b);
    $A = 1 + $uSq / 16384 * (4096 + $uSq * (-768 + $uSq * (320 – 175 * $uSq)));
    $B = $uSq / 1024 * (256 + $uSq * (-128 + $uSq * (74 – 47 * $uSq)));
    $deltaSigma = $B * $sinSigma * ($cos2SigmaM + $B / 4 * ($cosSigma * (-1 + 2 * $cos2SigmaM * $cos2SigmaM)
    – $B / 6 * $cos2SigmaM * (-3 + 4 * $sinSigma * $sinSigma) * (-3 + 4 * $cos2SigmaM * $cos2SigmaM)));

    $distance = $b * $A * ($sigma – $deltaSigma);
    return $distance;
    }
    “`

    使用示例:

    “`php
    $lat1 = 39.904202;
    $lon1 = 116.407394;
    $lat2 = 31.230393;
    $lon2 = 121.473704;

    $distance = distanceVincenty($lat1, $lon1, $lat2, $lon2);
    echo “两点之间的距离为:” . round($distance, 2) . “千米”;
    “`

    以上就是在PHP中计算经纬度之间距离的两种方法,你可以根据实际需求选择适合的方法来计算距离。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    计算经纬度之间的距离是一个常见的问题,有许多方法可以求解。下面介绍几种常见的方法。

    1. 使用球面三角法计算距离:这是一个基于球面三角学的方法,将地球看作一个球体,将经纬度转换为球面坐标,并利用三角关系来计算两点之间的距离。该方法适用于较短距离的计算,但由于地球并非完全球形,所以在较长距离的计算中可能会有一定误差。

    2. 使用Vincenty公式计算距离:Vincenty公式是一种更精确的球面三角计算方法,根据椭球体的参数来计算两点之间的距离。该方法考虑了地球的椭球形状,适用于任意两点间的距离计算,并且在较短距离和较长距离的计算中都能提供较高的精度。

    3. 使用Haversine公式计算距离:Haversine公式是一种基于球面三角法的简化方法,将地球看作一个完全球形,并且忽略了地球的椭球形状。该方法适用于较短距离的计算,并且在计算速度方面较快,但在较长距离的计算中可能会有一定误差。

    4. 使用Google Maps API计算距离:Google Maps API提供了一个方便的接口,可以根据两个地点的经纬度来计算它们之间的距离。该方法利用了Google地图中的路线规划和导航功能,可以计算最短路径上的距离,适用于需要考虑实际道路网络的情况。

    5. 使用第三方库计算距离:除了上述方法,还有许多第三方库提供了经纬度计算距离的功能,例如GDAL、Proj4等。这些库提供了更多的功能和选项,可以满足不同的应用需求。使用这些库可以更加方便地实现经纬度的距离计算。

    2年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    经纬度是用来表示地球上任意一点位置的坐标,通常表示为纬度(Latitude)和经度(Longitude)。计算两个经纬度之间的距离可以利用数学算法,其中最常用的方法是使用Haversine公式。

    Haversine公式是一个基于球面三角形的计算方法,可以使用经纬度信息来估算两个地点之间的距离。该公式基于假设地球是一个完美的球体,因此可以用简单的三角形来近似描述地球的形状。

    下面是一种通过php计算经纬度之间距离的方法:

    1. 引入必要的数学函数和常量
    “`php

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部