
正文
PHP根据传入的经纬度,和距离范围,返回所有在距离范围内的经纬度的取值范围
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
/**
* 根据传入的经纬度,和距离范围,返回所有在距离范围内的经纬度的取值范围
* @param float $lng 经度
* @param float $lat 纬度
* @param float $distance 距离(km)
* @return array
*/
function getSquarePoint($lng, $lat, $distance)
{
$earthRadius = ; //地球半径,km
$d_lng = * asin(sin($distance / ( * $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 = ; //地球平均半径,km //deg2rad()函数将角度转为弧度
$radLat1 = deg2rad($lat1);
$radLat2 = deg2rad($lat2);
$radLng1 = deg2rad($lng1);
$radLng2 = deg2rad($lng2);
$d_lat = $radLat1 - $radLat2;
$d_lng = $radLng1 - $radLng2;
$distance = * asin(sqrt(pow(sin($d_lat / ), ) + cos($radLat1) * cos($radLat2) * pow(sin($d_lng / ), ))) * $earthRadius * ;
return intval($distance / );
}







