# 根据经纬度计算距离 private 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; } # 获取根据坐标获取驾车距离 private function get_map_distance($lng1, $lat1, $lng2, $lat2) { //$this->autoRender = false; $mode = 'driving'; //选择模式,driving 驾车 ; walking 步行 $tactics = 12; //导航路线类型,10:不走高速;11:最少时间;12:最短路径。 $map_api = "http://api.map.baidu.com/direction/v1/routematrix?output=json&mode=".$mode."&tactics=".$tactics."&origins=".$lat1.",".$lng1."&destinations=".$lat2.",".$lng2."&ak=这里换成你的ak"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $map_api); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); curl_close($ch); if (strlen($output) == 0) { return "timeout"; } $output = get_object_vars(json_decode($output)); $output['result'] = get_object_vars($output['result']); $output['info'] = get_object_vars($output['info']); $output['info']['copyright'] = get_object_vars($output['info']['copyright']); $output['result']['elements']['0'] = get_object_vars($output['result']['elements']['0']); $output['result']['elements']['0']['distance'] = get_object_vars($output['result']['elements']['0']['distance']); $output['result']['elements']['0']['duration'] = get_object_vars($output['result']['elements']['0']['duration']); if ($output['status'] == 0) { $reput['distance']['jl_t'] = $output['result']['elements']['0']['distance']['text']; $reput['distance']['jl_v'] = $output['result']['elements']['0']['distance']['value']; $reput['distance']['time'] = $output['result']['elements']['0']['duration']['text']; } else { $reput['distance']['jl_t'] = 0; $reput['distance']['jl_v'] = 0; $reput['distance']['time'] = 0; } return $reput; }
/** * 查找一定范围内的经纬度值 * 传入值:纬度 经度 查找半径(m) * 返回值:最小纬度、经度,最大纬度、经度 */ public function getAround($lat,$lon,$raidus) { $PI = 3.14159265; // 圆周率 $EARTH_RADIUS = 6378137; // 地球半径 $RAD = Math.PI / 180.0; // 弧度 $latitude = $lat; $longitude = $lon; $degree = (24901*1609)/360.0; $raidusMile = $raidus; $dpmLat = 1/$degree; $radiusLat = $dpmLat*$raidusMile; $minLat = $latitude - $radiusLat; $maxLat = $latitude + $radiusLat; $mpdLng = $degree*cos($latitude * ($PI/180)); $dpmLng = 1 / $mpdLng; $radiusLng = $dpmLng*$raidusMile; $minLng = $longitude - $radiusLng; $maxLng = $longitude + $radiusLng; $result['minwei']=$minLat; $result['minjing']=$minLng; $result['maxwei']=$maxLat; $result['maxjing']=$maxLng; return $result; }
sql
round(6378.138*2*asin(sqrt(pow(sin( ($lat*pi()/180-`map_weidu`*pi()/180)/2),2)+cos($lat*pi()/180)*cos(`map_weidu`*pi()/180)* pow(sin( ($lng*pi()/180-`map_jingdu`*pi()/180)/2),2)))*1000) AS juli