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);
}
相關文章
相關標籤/搜索