搜索附近的人PHP实现代码
网络编程 2021-07-05 08:24www.168986.cn编程入门
这篇文章主要为大家详细介绍了搜索附近的人PHP实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了PHP实现搜索附近的人具体代码,供大家参考,具体内容如下
实现思路
,我们应该这样想 既然我们知道了用户当前位置的经纬度,又知道我们将要搜索的范围,我们可不可以计算出一个范围 ?也就是说,根据一个中心点和半径,计算出符合条件的经纬度的最大值和最小值 。
具体实现
那么到此,想要独立思考完成的小伙伴可以不要继续往下看了。
上面我们提到该功能的一个实现原理,接下来我们就讲解一下具体的实现步骤。
我们先声明一个函数,用作计算经纬度的范围
/ 根据经纬度和半径计算出范围 @param string $lat 纬度 @param String $lng 经度 @param float $radius 半径 @return Array 范围数组 / private function calcScope($lat, $lng, $radius) { $degree = (249011609)/360.0; $dpmLat = 1/$degree; $radiusLat = $dpmLat$radius; $minLat = $lat - $radiusLat; // 最小纬度 $maxLat = $lat + $radiusLat; // 最大纬度 $mpdLng = $degreecos($lat (PI/180)); $dpmLng = 1 / $mpdLng; $radiusLng = $dpmLng$radius; $minLng = $lng - $radiusLng; // 最小经度 $maxLng = $lng + $radiusLng; // 最大经度 / 返回范围数组 / $scope = array( 'minLat' => $minLat, 'maxLat' => $maxLat, 'minLng' => $minLng, 'maxLng' => $maxLng ); return $scope; }
返回的数组中包含了在 $radius 范围内,符合条件的最大最小经纬度。
既然我们已经获取到了范围,那么我们就可以开始从数据库中查找所有在这个经纬度范围内符合条件的记录
/ 根据经纬度和半径查询在此范围内的所有的电站 @param String $lat 纬度 @param String $lng 经度 @param float $radius 半径 @return Array 计算出来的结果 / public function searchByLatAndLng($lat, $lng, $radius) { $scope = $this->calcScope($lat, $lng, $radius); // 调用范围计算函数,获取最大最小经纬度 / 查询经纬度在 $radius 范围内的电站的详细地址 / $sql = 'SELECT `字段` FROM `表名` WHERE `Latitude` < '.$scope['maxLat'].' and `Latitude` > '.$scope['minLat'].' and `Longitude` < '.$scope['maxLng'].' and `Longitude` > '.$scope['minLng']; $stmt = self::$db->query($sql); $res = $stmt->fetchAll(PDO::FETCH_ASSOC); // 获取查询结果并返回 return $res; }
扩展
直到现在,我们已经知道了如何计算出附近的人,但在实际需求中,我们往往需要计算出每一个人与当前中心点的实际距离。
接着,我们再来看一个方法
/ 获取两个经纬度之间的距离 @param string $lat1 纬一 @param String $lng1 经一 @param String $lat2 纬二 @param String $lng2 经二 @return float 返回两点之间的距离 / public function calcDistance($lat1, $lng1, $lat2, $lng2) { / 转换数据类型为 double / $lat1 = doubleval($lat1); $lng1 = doubleval($lng1); $lat2 = doubleval($lat2); $lng2 = doubleval($lng2); / 以下算法是 Google 出来的,与大多数经纬度计算工具结果一致 / $theta = $lng1 - $lng2; $dist = sin(deg2rad($lat1)) sin(deg2rad($lat2)) + cos(deg2rad($lat1)) cos(deg2rad($lat2)) cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist 60 1.1515; return ($miles 1.609344); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
上一篇:PHP长连接实现与使用方法详解
下一篇:php微信开发之图片回复功能
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程