自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

手把手教你如何實(shí)現(xiàn)查看附近的人

移動(dòng)開發(fā)
今天分享的教程是教你如何實(shí)現(xiàn)附近的人或者其他內(nèi)容。服務(wù)器端用的php。 使用前提請確認(rèn)你的用戶數(shù)據(jù)表中是否有存儲用戶的最新坐標(biāo)和更新時(shí)間,最后單獨(dú)建一張表來存儲用戶的最新坐標(biāo)和更新時(shí)間。

今天分享的教程是教你如何實(shí)現(xiàn)附近的人或者其他內(nèi)容。服務(wù)器端用的php。 使用前提請確認(rèn)你的用戶數(shù)據(jù)表中是否有存儲用戶的***坐標(biāo)和更新時(shí)間,***單獨(dú)建一張表來存儲用戶的***坐標(biāo)和更新時(shí)間。

在獲取附近的人之前首先要獲取自己的坐標(biāo)??梢允褂胋aiduLocation來獲取當(dāng)前用戶的坐標(biāo),然后用當(dāng)前坐標(biāo)請求服務(wù)器返回按照距離排序的用戶數(shù)據(jù)。

 

  1. apiready = function() { 
  2.     var baiduLocation = api.require('baiduLocation'); 
  3.     baiduLocation.startLocation({ 
  4.         accuracy: '100m'
  5.         filter:1
  6.         autoStop: true 
  7.     }, function(ret, err){ 
  8.         var sta = ret.status; 
  9.         var lat = ret.latitude; 
  10.         var lon = ret.longitude; 
  11.         if(sta){ 
  12.             //成功獲取 
  13.         }else
  14.             //獲取失敗 
  15.         } 
  16.     }); 
  17. }; 

//獲取位置成功后,開發(fā)向服務(wù)器發(fā)送請求

 

  1. api.ajax({ 
  2.     url: 請求地址, 
  3.     method: 'post'
  4.     timeout: 30
  5.     dataType: 'json'
  6.     returnAll:false
  7.     data:{ 
  8.         values: {lat: lat,lon:lon} 
  9.     } 
  10. },function(ret,err){ 
  11.     if (ret) { 
  12.         var urlJson = JSON.stringify(ret); 
  13.         api.alert({msg: urlJson}); 
  14.     }else { 
  15.         api.alert({ 
  16.             msg'錯(cuò)誤碼:'+err.code+';錯(cuò)誤信息:'+err.msg+'網(wǎng)絡(luò)狀態(tài)碼:'+err.statusCode) 
  17.         }); 
  18.     }; 
  19. }); 

其實(shí)在APP端代碼非常簡單,主要就是獲取坐標(biāo)然后發(fā)送到服務(wù)器,然后服務(wù)器根據(jù)傳過來的坐標(biāo)來計(jì)算距離,按照距離排序返回?cái)?shù)據(jù)。那么重點(diǎn)就是服務(wù)器端如何實(shí)現(xiàn)了

服務(wù)器端就以php為例來講一下, 首先獲取有坐標(biāo)用戶的數(shù)據(jù),這個(gè)就是foreach一下了,然后根據(jù)傳過來的坐標(biāo)計(jì)算距離,下面是foreach里面的一段代碼

  1. 假設(shè) 用戶數(shù)據(jù)為  $data; 
  2.         //foreach之前先組裝下post過來的坐標(biāo) 
  3.         $lat = $_POST['lat']; 
  4.         $lon = $_POST['lon']; 
  5.         $myLocation = $lon.','.$lat; 
  6.  
  7.     foreach($data as $key=>$v){ 
  8.       //E:對方用戶坐標(biāo)為: 104.077638,30.673573 
  9.     $v['position'] = "104.077638,30.673573"
  10.       $newData[$key]['distance] = distanceBetween($myLocation,$v['position']); 
  11.  
  12.   ....... 
  13.   //其他用戶數(shù)據(jù) 

然后再foreach一下新數(shù)組根據(jù)距離來排序

  1. foreach ($newData as $key => $r) { 
  2.         $distance[] = $r['distance']; 
  3.     } 
  4.  
  5. array_multisort($distance, SORT_ASC, $newData); 
  6. 輸出JSON數(shù)組 
  7. echo json_encode($newData); 

注:上面foreach里面有個(gè)自定義函數(shù)distanceBetween();

這個(gè)是用來計(jì)算兩個(gè)坐標(biāo)的距離的,代碼如下:

  1. /** 
  2. * 計(jì)算兩個(gè)坐標(biāo)之間的距離(米) 
  3. * @param float $fP1Lat 起點(diǎn)(緯度) 
  4. * @param float $fP1Lon 起點(diǎn)(經(jīng)度) 
  5. * @param float $fP2Lat 終點(diǎn)(緯度) 
  6. * @param float $fP2Lon 終點(diǎn)(經(jīng)度) 
  7. * @return int 
  8. */ 
  9. function distanceBetween($mylonlat, $findlonlat){ 
  10.         $mylonlat = explode(',', $mylonlat); 
  11.         $findlonlat = explode(',', $findlonlat); 
  12.         list($lng1,$lat1) = $mylonlat; 
  13.         list($lng2,$lat2) = $findlonlat; 
  14.         $EARTH_RADIUS=6378.137
  15.         $PI=3.1415926
  16.         $radLat1 = $lat1 * $PI / 180.0
  17.         $radLat2 = $lat2 * $PI / 180.0
  18.         $a = $radLat1 - $radLat2; 
  19.         $b = ($lng1 * $PI / 180.0) - ($lng2 * $PI / 180.0); 
  20.         $s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2))); 
  21.         $s = $s * $EARTH_RADIUS; 
  22.         $s = round($s * 1000); 
  23.         if ($len_type > 1) {  
  24.                 $s /= 1000;  
  25.         }  
  26.         $distance = round($s/1000,2); 
  27.         return $distance; 
責(zé)任編輯:倪明 來源: APICloud
相關(guān)推薦

2021-12-11 20:20:19

Python算法線性

2023-04-26 12:46:43

DockerSpringKubernetes

2022-12-07 08:42:35

2022-07-27 08:16:22

搜索引擎Lucene

2011-10-06 14:32:43

2009-11-09 14:57:37

WCF上傳文件

2011-01-06 10:39:25

.NET程序打包

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機(jī)

2011-04-21 10:32:44

MySQL雙機(jī)同步

2020-05-15 08:07:33

JWT登錄單點(diǎn)

2021-03-12 10:01:24

JavaScript 前端表單驗(yàn)證

2022-06-06 08:50:40

CIOIT轉(zhuǎn)型

2014-08-08 13:22:54

測試手機(jī)站點(diǎn)移動(dòng)設(shè)備

2021-01-19 09:06:21

MysqlDjango數(shù)據(jù)庫

2021-11-09 06:55:03

水印圖像開發(fā)

2010-07-06 09:38:51

搭建私有云

2010-07-06 09:43:57

搭建私有云

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號