PHP通过计算经纬度获取附近的数据信息
生活随笔
收集整理的這篇文章主要介紹了
PHP通过计算经纬度获取附近的数据信息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/**
*計算某個經緯度的周圍某段距離的正方形的四個點
*
*@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 是根據數據庫中經錄的坐標點計算兩個坐標點之間的距離
總結
以上是生活随笔為你收集整理的PHP通过计算经纬度获取附近的数据信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 收集的伪静态中经常使用的一些参数解释,如
- 下一篇: centos 下的 PHP 的编译过程