QQ:1346883814
/**
* 计算两坐标之间距离
* vic优化版
* @param double $lat1
* 起点纬度
* @param double $lng1
* 起点经度
* @param double $lat2
* 终点纬度
* @param double $lng2
* 终点经度
* @return float 米
*/
function getDistance($lat1, $lng1, $lat2, $lng2,$Arr = array())
{
$dx = $lng1 - $lng2; // 经度差值
$dy = $lat1 - $lat2; // 纬度差值
$b = ($lat1 + $lat2) / 2.0; // 平均纬度
$Lx = deg2rad($dx) * 6367000.0* cos(deg2rad($b)); // 东西距离
$Ly = 6367000.0 * deg2rad($dy); // 南北距离
return round(sqrt($Lx * $Lx + $Ly * $Ly));//'米'; // 用平面的矩形对角距离公式计算总距离
}
/**
*计算某个经纬度的周围某段距离的正方形的四个点
*
*@param lng float 经度
*@param lat float 纬度
*@param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米
*@return array 正方形的四个点的经纬度坐标
*/
function returnSquarePoint($lng, $lat,$distance = 0.5){
$dlng = 2 * asin(sin($distance / (2 * 6371)) / cos(deg2rad($lat)));
$dlng = rad2deg($dlng);
$dlat = $distance/6371;;
$dlat = rad2deg($dlat);
return 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)
);
}
// //使用此函数计算得到结果后,带入sql查询。
// $squares = returnSquarePoint($lng, $lat);
// $info_sql = "select id,locateinfo,lat,lng from `lbs_info` where lat<>0 and lat>{$squares['right-bottom']['lat']} and lat<{$squares['left-top']['lat']} and lng>{$squares['left-top']['lng']} and lng<{$squares['right-bottom']['lng']} ";