/**
*求两个已知经纬度之间的距离,单位为米
* @param $lng1 $经度
* @param $lat1 $纬度
* @param $lng2 $经度
* @param $lat2 $纬度
* @return float|int 单位 米
*/
function getDistance($lng1, $lat1, $lng2, $lat2)
{
// 将角度转为弧度
$radLat1 = deg2rad($lat1); //deg2rad()函数将角度转换为弧度
$radLat2 = deg2rad($lat2);
$radLng1 = deg2rad($lng1);
$radLng2 = deg2rad($lng2);
$a = $radLat1 - $radLat2;
$b = $radLng1 - $radLng2;
$s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137 * 1000;
return $s;
}
/**
* *计算某个经纬度的周围某段距离的正方形的四个点
* *@param $lng float 经度
* *@param $lat float 纬度
* *@param $distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米
* *@return array 正方形的四个点的经纬度坐标
* */
function returnSquarePoint1($lng, $lat, $distance = 5)
{
$earthdata = 6371;//地球半径,平均半径为6371km
$dlng = 2 * asin(sin($distance / (2 * $earthdata)) / cos(deg2rad($lat)));
$dlng = rad2deg($dlng);
$dlat = $distance / $earthdata;
$dlat = rad2deg($dlat);
$arr = array(
'left_top' => array('lat' => $lat + $dlat, 'lng' => $lng - $dlng),
'right_top' => array('lat' => $lat + $dlat, 'lng' => $lng + $dlng),
'left_bottom' => array('lat' => $lat - $dlat, 'lng' => $lng - $dlng),
'right_bottom' => array('lat' => $lat - $dlat, 'lng' => $lng + $dlng)
);
return $arr;
}
网友评论