美文网首页扣丁学堂PHP培训
PHP视频教程之PHP搜索附近的人实现代码

PHP视频教程之PHP搜索附近的人实现代码

作者: 994d14631d16 | 来源:发表于2018-07-31 10:42 被阅读4次

    搜索附近的人这项功能对我们来说已经不在陌生了,那么搜索附近的人怎么用PHP实现呢?本篇文章扣丁学堂PHP培训小编就带读者们来了解一下PHP搜索附近的人如何用代码实现。

    PHP视频教程

    本文实例为大家分享PHP实现搜索附近的人具体代码,供大家参考,具体内容如下。

    实现思路:

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

    具体实现:

    那么到此,想要独立思考完成的小伙伴可以不要继续往下看了。

    上面我们提到该功能的一个实现原理,接下来我们就讲解一下具体的实现步骤。

    我们先声明一个函数,用作计算经纬度的范围:

    /**

     * 根据经纬度和半径计算出范围

     * @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,

        '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在线视频供学员免费学习。想要学好PHP开发的小伙伴现在就行动吧。

    相关文章

      网友评论

        本文标题:PHP视频教程之PHP搜索附近的人实现代码

        本文链接:https://www.haomeiwen.com/subject/twpcvftx.html