直接上代码示例,懂的会看懂,不懂的也不打算让你看懂就是做个笔记!
$sql="select id,ispass,pid,address,lng,lat,brandshop,province,city,area,mobile from gn_member where pid=0 and ispass=1 and level=3 order by ACOS(SIN((".$lat." * 3.1415) / 180 ) *SIN((lat * 3.1415) / 180 ) +COS((".$lat." * 3.1415) / 180 ) * COS((lat * 3.1415) / 180 ) *COS((".$lng." * 3.1415) / 180 - (lng * 3.1415) / 180 ) ) * 6380 asc limit ".($page-1)*$this->pagecount.", ".$this->pagecount;
$resData['list']=Db::query($sql);
/**
*求两个已知经纬度之间的距离,单位为千米
*@param lng1,lng2 经度
*@param lat1,lat2 纬度
*@return float 距离,单位千米
**/
private function distance($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;
if($s<1){$s=intval($s*1000)."m";}
elseif($s>=1 && $s<=100){$s=round($s,2)."km";}
else{$s=0;}
return $s;
}