• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP实现搜索附近的人功能

php 搞代码 3年前 (2022-01-22) 26次浏览 已收录 0个评论

首先,我们应该这样想: 既然我们知道了用户当前位置的经纬度,又知道我们将要搜索的范围,我们可不可以计算出一个范围 ?也就是说,根据一个中心点和半径,计算出符合条件的经纬度的最大值和最小值 。

具体实现:

那么到此,想要独立思考完成的小伙伴可以不要继续往下看了。
上面我们提到该功能的一个实现原理,接下来我们就讲解一下具体的实现步骤。
我们先声明一个函数,用作计算经纬度的范围:

/** * 根据经纬度和半径计算出范围 * @param string $lat 纬度 * @param String $lng 经度 * @param float $radius 半径 * @return Array 范围数组 */private function calcScope($lat, $lng, $radius) {  $degree = (24901*1609)/360.0;  $dpmLat = 1/$degree;  $radiusLat = $dpmLat*$radius;  $minLat = $lat - $radiusLat;    // 最小纬度  $maxLat = $lat + $radiusLat;    // 最大纬度  $mpdLng = $degree*cos($lat * (PI/180));  $dpmLng = 1 / $mpdLng;  $radiusLng = $dpmLng*$radius;  $minLng = $lng - $radiusLng;   // 最小经度  $maxLng = $lng + $radiusLng;   // 最大经度  /** 返回范围数组 */  $scope = array(    'minLat'  => $minLat<em>¥本文来%源[email protected]搞@^&代*@码)网5</em><strong>搞gaodaima代码</strong>,    '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);}

相关推荐:

PHP查询附近的人及其距离的实现方法,php查询距离实现_PHP教程

以上就是PHP实现搜索附近的人功能的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP实现搜索附近的人功能

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址