zoukankan      html  css  js  c++  java
  • PHP根据传入的经纬度,和距离范围,返回所有在距离范围内的经纬度的取值范围

    /**
     * 根据传入的经纬度,和距离范围,返回所有在距离范围内的经纬度的取值范围
     * @param float $lng 经度
     * @param float $lat 纬度
     * @param float $distance 距离(km)
     * @return array
     */
    function getSquarePoint($lng, $lat, $distance)
    {
        $earthRadius = 6371; //地球半径,km
        $d_lng = 2 * asin(sin($distance / (2 * $earthRadius)) / cos(deg2rad($lat)));
        $d_lng = rad2deg($d_lng);
        $d_lat = $distance / $earthRadius;
        $d_lat = rad2deg($d_lat);
        return array(
            'lng_start' => $lng - $d_lng,//经度开始
            'lng_end' => $lng + $d_lng, //经度结束
            'lat_start' => $lat - $d_lat,//纬度开始
            'lat_end' => $lat + $d_lat,//纬度结束
        );
    }
    /**
     * 计算两个已知经纬度之间的距离
     * @param float $lng1 经度1
     * @param float $lat1 纬度1
     * @param float $lng2 经度2
     * @param float $lat2 纬度2
     * @return float 距离(单位米)
     */
    function getPointDistance($lng1, $lat1, $lng2, $lat2)
    {
        $earthRadius = 6371; //地球平均半径,km
    
        //deg2rad()函数将角度转为弧度
        $radLat1 = deg2rad($lat1);
        $radLat2 = deg2rad($lat2);
        $radLng1 = deg2rad($lng1);
        $radLng2 = deg2rad($lng2);
        $d_lat = $radLat1 - $radLat2;
        $d_lng = $radLng1 - $radLng2;
        $distance = 2 * asin(sqrt(pow(sin($d_lat / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($d_lng / 2), 2))) * $earthRadius * 1000;
        return intval($distance / 1000);
    }
  • 相关阅读:
    fzu 2122
    hdu 4707 bellman
    sicily 10330. Cutting Sausages
    湖南省2016省赛题。1809: Parenthesis 线段树
    Panoramic Photography
    B. No Time for Dragons 贪心
    The Weakest Sith
    E. The Best among Equals
    Gym 101149I I
    AtCoder D
  • 原文地址:https://www.cnblogs.com/rxbook/p/10954062.html
Copyright © 2011-2022 走看看