<output id="r87xx"></output>
    1. 
      
      <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
        •   

               當(dāng)前位置:首頁>軟件介紹>PHP搜索附近的人實(shí)現(xiàn)代碼 查詢:
               
          PHP搜索附近的人實(shí)現(xiàn)代碼

          搜索附近的人這項(xiàng)功能對我們來說已經(jīng)不在陌生了,那么搜索附近的人怎么用PHP實(shí)現(xiàn)呢?本篇文章小編就帶讀者們來了解一下PHP搜索附近的人如何用代碼實(shí)現(xiàn)。

          本文實(shí)例為大家分享PHP實(shí)現(xiàn)搜索附近的人具體代碼,供大家參考,具體內(nèi)容如下。

          實(shí)現(xiàn)思路:

          首先,我們應(yīng)該這樣想:既然我們知道了用戶當(dāng)前位置的經(jīng)緯度,又知道我們將要搜索的范圍,我們可不可以計(jì)算出一個范圍?也就是說,根據(jù)一個中心點(diǎn)和半徑,計(jì)算出符合條件的經(jīng)緯度的最大值和最小值。

          具體實(shí)現(xiàn):

          那么到此,想要獨(dú)立思考完成的小伙伴可以不要繼續(xù)往下看了。

          上面我們提到該功能的一個實(shí)現(xiàn)原理,接下來我們就講解一下具體的實(shí)現(xiàn)步驟。

          我們先聲明一個函數(shù),用作計(jì)算經(jīng)緯度的范圍:

          /**

          * 根據(jù)經(jīng)緯度和半徑計(jì)算出范圍

          * @param string $lat 緯度

          * @param String $lng 經(jīng)度

          * @param float $radius 半徑

          * @return Array 范圍數(shù)組

          */

          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; // 最小經(jīng)度

          $maxLng = $lng + $radiusLng; // 最大經(jīng)度

          /** 返回范圍數(shù)組 */

          $scope = array(

          'minLat' => $minLat,

          'maxLat' => $maxLat,

          'minLng' => $minLng,

          'maxLng' => $maxLng

          );

          return $scope;

          }

          返回的數(shù)組中包含了在$radius 范圍內(nèi),符合條件的最大最小經(jīng)緯度。既然我們已經(jīng)獲取到了范圍,那么我們就可以開始從數(shù)據(jù)庫中查找所有在這個經(jīng)緯度范圍內(nèi)符合條件的記錄:

          /**

          * 根據(jù)經(jīng)緯度和半徑查詢在此范圍內(nèi)的所有的電站

          * @param String $lat 緯度

          * @param String $lng 經(jīng)度

          * @param float $radius 半徑

          * @return Array 計(jì)算出來的結(jié)果

          */

          public function searchByLatAndLng($lat, $lng, $radius) {

          $scope = $this->calcScope($lat, $lng, $radius); // 調(diào)用范圍計(jì)算函數(shù),獲取最大最小經(jīng)緯度

          /** 查詢經(jīng)緯度在 $radius 范圍內(nèi)的電站的詳細(xì)地址 */

          $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); // 獲取查詢結(jié)果并返回 return $res;

          }

          擴(kuò)展:

          直到現(xiàn)在,我們已經(jīng)知道了如何計(jì)算出附近的人,但在實(shí)際需求中,我們往往需要計(jì)算出每一個人與當(dāng)前中心點(diǎn)的實(shí)際距離。接著,我們再來看一個方法:

          /**

          * 獲取兩個經(jīng)緯度之間的距離

          * @param string $lat1 緯一

          * @param String $lng1 經(jīng)一

          * @param String $lat2 緯二

          * @param String $lng2 經(jīng)二

          * @return float 返回兩點(diǎn)之間的距離

          */

          public function calcDistance($lat1, $lng1, $lat2, $lng2) {

          /** 轉(zhuǎn)換數(shù)據(jù)類型為 double */

          $lat1 = doubleval($lat1);

          $lng1 = doubleval($lng1);

          $lat2 = doubleval($lat2);

          $lng2 = doubleval($lng2);

          /** 以下算法是 Google 出來的,與大多數(shù)經(jīng)緯度計(jì)算工具結(jié)果一致 */

          $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實(shí)現(xiàn),希望對小伙伴們有所幫助,想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢。



          php中關(guān)于引用(&)詳解 PHP正則表達(dá)式的幾則使用技巧
          細(xì)說PHP模板引擎windows下PHP運(yùn)行環(huán)境安裝詳解
          js與php調(diào)用PHP與ASP.NET的比較
          PHP基本語法補(bǔ)充案例PHP簡明教程
          php開源框架分析PHP文件刪除程序
          php陰歷程序寶典php驗(yàn)證碼制作
          PHP的頁面緩沖處理機(jī)制PHP之防御sql注入攻擊的方式
          PHP入門篇php教程-基礎(chǔ)版
          信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
          • 勁爆價(jià):
            不限功能
            不限用戶
            1998元/年

          • 微信客服

            <output id="r87xx"></output>
          1. 
            
            <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
              • 开心五月深深爱婷婷和丁香 | 天天躁夜夜躁狂躁2022 | NP玩烂了公用爽灌满视频播放 | 日本特一级A片 | 亚洲综合娱乐 | AA级黄色一级黄色 | www.啪 | 火爆全网嫖妓达人金先生约战极品S空 | 午夜伊人大香蕉 | 777精品久无码人妻蜜桃 |