关于thinkphp附近的人经纬度计算方法/距离计算等
小白 2020-07-09 【原创文章】
很实用的方法,
关于thinkphp附近的人经纬度计算方法/距离计算等
距离算法我没调用,用的小伙伴 自己调用即可
具体看代码:
/** * 选取服务点 */ public function city(){ $data = input('post.'); $latitude = $data['latitude'];//纬度 $longitude = $data['longitude'];//经度 $point = $this->returnSquarePoint($longitude,$latitude,50000); //得到四个点 $where[] = ['latitude',['>',$point['minLat']],['<',$point['maxLat']],'and']; $where[] = ['longitude',['>',$point['minLon']],['<',$point['maxLon']],'and']; $where[] = ['pid','NEQ',0]; $list = CityModel::where($where)->select(); return json(['code'=>500,'data'=>$list]); }
// *@param lng float 经度 // *@param lat float 纬度 // *@param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为单位米 // *@return array 正方形的四个点的经纬度坐标 public function returnSquarePoint($lng, $lat,$distance) { $PI = 3.14159265; $longitude = $lng; $latitude = $lat; $degree = (24901*1609)/360.0; $raidusMile = $distance; $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; //拿到最大经度 $range = array( 'minLat' => $minLat, 'maxLat' => $maxLat, 'minLon' => $minLng, 'maxLon' => $maxLng ); return $range; }
// 查询距离 public function getDistance($latitude1,$latitude2,$longitude1,$longitude2,$unit){ $EARTH_RADIUS = 6370.996; // 地球半径系数 $PI = 3.1415926; // $radLat1 = $latitude1 * $PI / 180.0; $radLat2 = $latitude2 * $PI / 180.0; $radLng1 = $longitude1 * $PI / 180.0; $radLng2 = $longitude2 * $PI /180.0; $a = $radLat1 - $radLat2; $b = $radLng1 - $radLng2; $distance = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2))); $distance = $distance * $EARTH_RADIUS * 1000; if($unit==2){ $distance = $distance / 1000; } return $distance; }
最新发布
- 守护进程-kill端口-输出日志-查看等!
- git 本地分支关联远程分支,合并!
- pytorch安装(含cuda、cudnn安装教程)!
- linux系统下ubuntu22.04安装Docker方法!
- 视频截取封面 =php-ffmpeg/php-ffmpeg!
- 常用实例2023-5-10!
- 富文本 塞入mysql 报错: General error: 1366 Incorrect string value: ‘\xF0\x9F\x98\x84‘ for column ‘content‘!
- 百度地图拖拽获取地址实例!
- php使用smtp鉴权方式发送邮件 插件PHPMailer!
- 有道翻译接口对接!