帖子
帖子
用户
博客
课程
123下一页
返回列表 发新帖
7
帖子
0
勋章
337
Y币
葡萄 发表于 2015-6-16 14:14
这样用循环的方式,性能方面如何提高呢?????如果用户量大,如何可以实时找到附件的人呢? ...

同问,性能很重要
89
帖子
0
勋章
1万+
Y币
继续学习中!
21
帖子
0
勋章
770
Y币
$len_type是什么
13
帖子
0
勋章
67
Y币
:lol:lol:lol

本帖子中包含更多资源,您需要 登录 才可以下载或查看,没有帐号?立即注册

X
21
帖子
0
勋章
770
Y币
本帖最后由 xnceo 于 2015-7-30 10:30 编辑

把用户的坐标记录到内存中,如memcached , redis 中,加快查询速度,如没有这两个,那就经纬分开记录到数据库字段中,并分别建立索引,查询时分两次查询,不要写成一条where条件,否则索起不到多大效果。按经范围搜索出大概的数据再计算。
当然位置的计算也可以分散到用户的设备上,不过这样要改一改,将上面的PHP改成javascript版的计算距离,我给个我用的吧:

  1. <script type="text/javascript">
  2. /*
  3.   获取坐标地址:http://api.map**.**/lbsapi/getpoint/index.html
  4.   计算地图两点距离,返回的数组由距离(d[0])和单位(d[1])组成
  5.   dis(起点经,纬,终点经,纬)
  6. */
  7. function dis(sLon, sLat, eLon, eLat){
  8.         if( (sLon==0 && sLat==0) || (eLon==0 && eLat==0) || sLon == undefined || sLat == undefined || eLon == undefined || eLat == undefined ){
  9.                 return new Array("unknow");
  10.         }
  11.         var arr = new Array(2);
  12.         
  13.         var radLat1 = sLat * Math.PI/180.0;
  14.         var radLat2 = eLat * Math.PI/180.0;
  15.         var a = radLat1 - radLat2;
  16.         var b = (sLon * Math.PI/180.0) - (eLon * Math.PI/180.0);

  17.         var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b/2),2)));
  18.         s = s * 6378.14;
  19.         s = Math.round(s*1000)/1000;
  20.         if(s<1){
  21.                 s  *= 1000;
  22.                 arr[1] = 'm';
  23.         }else{
  24.                 s = Math.round(s*10)/10;
  25.                 arr[1] = 'km';
  26.         }
  27.         arr[0] = s;
  28.         return arr;
  29. }

  30. //示例 //
  31. var d = dis(0,0, 120.152559,30.258524);
  32. document.write( d.join("") +"<br>");
  33. //白堤
  34. var d = dis(120.158452,30.264621, 120.152559,30.258524);
  35. document.write( d.join("") +"<br>");
  36. //堤 -> 校
  37. var d = dis(120.158452,30.264621, 120.172704,30.296707);
  38. document.write( d.join("") +"<br>");
  39. //堤 -> 金
  40. var d = dis(120.158452,30.264621, 119.745303,29.12065);
  41. document.write( d.join("") +"<br>");
  42. </script>
复制代码
21
帖子
0
勋章
770
Y币
输出效果类似这样:
unknow
884m
3.8km
133.5km
5
帖子
0
勋章
23
Y币
碉堡天
25
帖子
0
勋章
188
Y币
为什么我获取不到自己的坐标.......
15
帖子
0
勋章
688
Y币
用redis 后台limit就好了 不会超量的
204
帖子
0
勋章
710
Y币
xnceo 发表于 2015-7-30 10:28
把用户的坐标记录到内存中,如memcached , redis 中,加快查询速度,如没有这两个,那就经纬分开记录到数据 ...

从数据库取用户的坐标  如果数据库有1000条用户数据或者更多呢  取出来并计算  加载的时间长 手机没有问题吗?
123下一页
您需要登录后才可以回帖 登录

本版积分规则