/**
* [GetSquarePoint 坐标圆周率计算]
* $lng = '116.655540';
* $lat = '39.910980';
* $squares = GetSquarePoint($lng, $lat);
*
* print_r($squares);
* $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']} ";
* 计算某个经纬度的周围某段距离的正方形的四个点
*
* param lng float 经度
* param lat float 纬度
* param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米
* return array 正方形的四个点的经纬度坐标
*/
function GetSquarePoint($lng, $lat, $distance = 0.5)
{
if(empty($lng) || empty($lat)) return '';
/* 地球半径,平均半径为6371km */
$radius = 6371;
$d_lng = 2 * asin(sin($distance / (2 * $radius)) / cos(deg2rad($lat)));
$d_lng = rad2deg($d_lng);
$d_lat = $distance/$radius;
$d_lat = rad2deg($d_lat);
return array(
'left-top'=>array('lat'=>$lat + $d_lat,'lng'=>$lng-$d_lng),
'right-top'=>array('lat'=>$lat + $d_lat, 'lng'=>$lng + $d_lng),
'left-bottom'=>array('lat'=>$lat - $d_lat, 'lng'=>$lng - $d_lng),
'right-bottom'=>array('lat'=>$lat - $d_lat, 'lng'=>$lng + $d_lng)
);
}
发表评论: