欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂PHP視頻教程之PHP搜索附近的人實現(xiàn)代碼

2018-07-11 13:27:56 1361瀏覽

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



扣丁學(xué)堂PHP視頻教程之PHP搜索附近的人實現(xiàn)代碼



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


實現(xiàn)思路:


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



具體實現(xiàn):


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


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


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


/**
 * 根據(jù)經(jīng)緯度和半徑計算出范圍
 * @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     計算出來的結(jié)果
 */
public function searchByLatAndLng($lat, $lng, $radius) {
  $scope = $this->calcScope($lat, $lng, $radius);   // 調(diào)用范圍計算函數(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)知道了如何計算出附近的人,但在實際需求中,我們往往需要計算出每一個人與當(dāng)前中心點的實際距離。接著,我們再來看一個方法:


/**
 * 獲取兩個經(jīng)緯度之間的距離
 * @param string $lat1 緯一
 * @param String $lng1 經(jīng)一
 * @param String $lat2 緯二
 * @param String $lng2 經(jīng)二
 * @return float 返回兩點之間的距離
 */
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)緯度計算工具結(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);
}


以上就是扣丁學(xué)堂PHP在線學(xué)習(xí)小編為大家簡單分享的搜索附近的人怎么用PHP實現(xiàn),希望對小伙伴們有所幫助,想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢??鄱W(xué)堂不僅有專業(yè)的PHP培訓(xùn)班供學(xué)員學(xué)習(xí),還有與時俱進(jìn)的課程體系和大量的PHP在線視頻供學(xué)員免費學(xué)習(xí)。想要學(xué)好PHP開發(fā)的小伙伴現(xiàn)在就行動吧??鄱W(xué)堂PHP技術(shù)交流群:374332265。


扣丁學(xué)堂微信公眾號

【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】

 


查看更多關(guān)于“php培訓(xùn)資訊”的相關(guān)文章>>




標(biāo)簽: 扣丁學(xué)堂PHP視頻教程 PHP搜索附近的人實現(xiàn)代碼 PHP視頻教程 PHP培訓(xùn) PHP基礎(chǔ)教程 PHP在線視頻 PHP在線學(xué)習(xí)

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部