/** * [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) ); }
发表评论: