手把手教你如何实现查看附近的人

移动开发
今天分享的教程是教你如何实现附近的人或者其他内容。服务器端用的php。 使用前提请确认你的用户数据表中是否有存储用户的最新坐标和更新时间,最后单独建一张表来存储用户的最新坐标和更新时间。

今天分享的教程是教你如何实现附近的人或者其他内容。服务器端用的php。 使用前提请确认你的用户数据表中是否有存储用户的***坐标和更新时间,***单独建一张表来存储用户的***坐标和更新时间。

在获取附近的人之前首先要获取自己的坐标。可以使用baiduLocation来获取当前用户的坐标,然后用当前坐标请求服务器返回按照距离排序的用户数据。

 

  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. }; 

//获取位置成功后,开发向服务器发送请求

 

  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'错误码:'+err.code+';错误信息:'+err.msg+'网络状态码:'+err.statusCode) 
  17.         }); 
  18.     }; 
  19. }); 

其实在APP端代码非常简单,主要就是获取坐标然后发送到服务器,然后服务器根据传过来的坐标来计算距离,按照距离排序返回数据。那么重点就是服务器端如何实现了

服务器端就以php为例来讲一下, 首先获取有坐标用户的数据,这个就是foreach一下了,然后根据传过来的坐标计算距离,下面是foreach里面的一段代码

  1. 假设 用户数据为  $data; 
  2.         //foreach之前先组装下post过来的坐标 
  3.         $lat = $_POST['lat']; 
  4.         $lon = $_POST['lon']; 
  5.         $myLocation = $lon.','.$lat; 
  6.  
  7.     foreach($data as $key=>$v){ 
  8.       //E:对方用户坐标为: 104.077638,30.673573 
  9.     $v['position'] = "104.077638,30.673573"
  10.       $newData[$key]['distance] = distanceBetween($myLocation,$v['position']); 
  11.  
  12.   ....... 
  13.   //其他用户数据 

然后再foreach一下新数组根据距离来排序

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

注:上面foreach里面有个自定义函数distanceBetween();

这个是用来计算两个坐标的距离的,代码如下:

  1. /** 
  2. * 计算两个坐标之间的距离(米) 
  3. * @param float $fP1Lat 起点(纬度) 
  4. * @param float $fP1Lon 起点(经度) 
  5. * @param float $fP2Lat 终点(纬度) 
  6. * @param float $fP2Lon 终点(经度) 
  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; 
责任编辑:倪明 来源: APICloud
相关推荐

2021-12-11 20:20:19

Python算法线性

2023-04-26 12:46:43

DockerSpringKubernetes

2022-07-27 08:16:22

搜索引擎Lucene

2022-12-07 08:42:35

2011-10-06 14:32:43

2011-01-06 10:39:25

.NET程序打包

2009-11-09 14:57:37

WCF上传文件

2021-07-14 09:00:00

JavaFX开发应用

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印机

2011-04-21 10:32:44

MySQL双机同步

2021-03-12 10:01:24

JavaScript 前端表单验证

2020-05-15 08:07:33

JWT登录单点

2022-06-06 08:50:40

CIOIT转型

2014-08-08 13:22:54

测试手机站点移动设备

2021-01-19 09:06:21

MysqlDjango数据库

2010-07-06 09:38:51

搭建私有云

2010-07-06 09:43:57

搭建私有云

2021-11-09 06:55:03

水印图像开发

2022-03-14 14:47:21

HarmonyOS操作系统鸿蒙
点赞
收藏

51CTO技术栈公众号