PHP

通过当前位置查询周边500米范围内的数据

作者:admin110 来源:web交流网 2016-06-15 11:49 浏览:0 我要评论(0)

define(EARTH_RADIUS, 6371); 地球半径,平均半径为6371km ***计算某个经纬度的周围某段距离的正方形的四个点 * *@param lng float

define(EARTH_RADIUS, 6371);//地球半径,平均半径为6371km   
 /**
 *计算某个经纬度的周围某段距离的正方形的四个点  
 *  
 *@param lng float 经度  
 *@param lat float 纬度  
 *@param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米  
 *
array 正方形的四个点的经纬度坐标
 */  
function returnSquarePoint($lng, $lat,$distance = 1){   
  
    $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 rad($d)     
{     
    return $d * M_PI / 180.0;     
}     
/**
* 获取两个坐标点之间的距离,单位km,小数点后2位  
*/  
function GetDistance($lat1, $lng1, $lat2, $lng2)     
{     
    $EARTH_RADIUS = 6378.137;     
    $radLat1 = rad($lat1);     
    $radLat2 = rad($lat2);     
    $a = $radLat1 - $radLat2;     
    $b = rad($lng1) - rad($lng2);     
    $s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));     
    $s = $s * $EARTH_RADIUS;     
    $s = round($s * 100) / 100;   
    $s = $s*1000;     
    return $s;     
}   
 $lng=119.941311;   
 $lat=28.465285;   
//使用此函数计算得到结果后,带入sql查询。   
$squares = returnSquarePoint($lng, $lat);   
$host="localhost";    
$db_user="root";    
$db_pass="";    
$db_name="inlishui";    
$ =mysql_connect($host,$db_user,$db_pass);    
mysql_select_db($db_name,$ );    
mysql_query("SET names UTF8");    
$result = mysql_query("select ID,X,Y from `life` where Y<>0 and Y>{$squares['right-bottom']['lat']} and Y<{$squares['left-top']['lat']} and X>{$squares['left-top']['lng']} and X<{$squares['right-bottom']['lng']}");   
while($row=mysql_fetch_array($result)){ //循环的时候每次取一条记录返回的是一维数组   
        $arr[] = array($row[0],$row[1],$row[2]); //在arr数组变量里每次增加数组元素   
}   
foreach ($arr as $key=> $v){   
     $arr[$key][3]=GetDistance($lat, $lng, $v[2], $v[1]);   
}

转载请注明出处。

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源;3.作者投稿可能会经我们编辑修改或补充。

网友点评
评论(已有0条评论)
还没有评论,快来抢沙发吧!
新闻
  • 新闻
  • 软件
精彩导读