PHP通过计算经纬度获取附近的数据信息

来源:互联网 发布:linux rpm命令 编辑:程序博客网 时间:2024/04/28 06:06
/***计算某个经纬度的周围某段距离的正方形的四个点**@param lng float 经度*@param lat float 纬度*@param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米*@return array 正方形的四个点的经纬度坐标*/function returnSquarePoint($lng, $lat,$distance = 0.5){define(EARTH_RADIUS, 6371);//地球半径,平均半径为6371km$dlng = 2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));$dlng = rad2deg($dlng);$dlat = $distance/EARTH_RADIUS;$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));}function getdistance($lng1,$lat1,$lng2,$lat2){//根据经纬度计算距离 单位为公里//将角度转为狐度$radLat1=deg2rad($lat1);$radLat2=deg2rad($lat2);$radLng1=deg2rad($lng1);$radLng2=deg2rad($lng2);$a=$radLat1-$radLat2;//两纬度之差,纬度<90$b=$radLng1-$radLng2;//两经度之差纬度<180$s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137;return $s;}

函数 returnSquarePoint 是用来获取某个坐标点附近0.5KM之内的正方形的四个点,通过此办法获取附近的面积,并通过此函数组合出所需的SQL语句,如:

$squares = returnSquarePoint($lng, $lat, 100);$condition = "location_x<>0 and location_x>{$squares['right-bottom']['lat']} and location_x<{$squares['left-top']['lat']} and location_y>{$squares['left-top']['lng']} and location_y<{$squares['right-bottom']['lng']}";

函数 getdistance 是根据数据库中经录的坐标点计算两个坐标点之间的距离

1 0