美文网首页
任意经纬度计算两点的最短距离

任意经纬度计算两点的最短距离

作者: pengtoxen | 来源:发表于2019-05-10 13:48 被阅读0次
    /** 作者:张宏扬
     * 根据经纬度计算距离
     * 函数和sql语句分别实现
     * 此文件仅作参考,请根据自己的需要,进行相应的更改
     *   */
        //第一种,通过封装函数实现
        /**
         *  @desc 根据两点间的经纬度计算距离
         *  @param float $lat 纬度值
         *  @param float $lng 经度值
         *  @return 米
         */
        function getDistance($lat1, $lng1, $lat2, $lng2){
            $earthRadius = 6367000;
            $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 = $earthRadius * $stepTwo;
            return round($calculatedDistance);
        }
        //调用,输出千米
        echo getDistance(30.511195,114.345571,30.487192,114.486789)/1000;
        //第二种,通过sql语句实现
        //表的结构
        //id 主键
        //lat 纬度
        //long 经度
        $sql="select round(degrees(acos(sin(radians($lat))*sin(radians(`lat`))+cos(radians($lat))*cos(radians(`lat`))*cos(radians($long-`long`))))*69.09) as distance from lat_long order by distance asc limit 5";
        //说明:传入指定的经纬度,查询数据库,计算距离,并且根据距离排序,可以取出最近或者最远的几条
    ```

    相关文章

      网友评论

          本文标题:任意经纬度计算两点的最短距离

          本文链接:https://www.haomeiwen.com/subject/gzqaoqtx.html