wkiwi的博客

小程序定位是否在指定范围内

发布时间:6年前热度: 3639 ℃评论数:

在自研产品「商图助理」正式全馆普及之后,出现了定位不在范围内的情况,经过埋点后台统计,查看部分机型存在定位偏离,且偏离比较大,起初在限定用户定位范围值设定的比较小,导致这部分用户一直无法使用本系统,最终对实际检测值进行了适中的扩大,下方放出前后端计算两坐标点距离的代码




腾讯地图经纬度拾取直通车




WechatIMG1.jpeg

JS


代码如下

  1. function GetDistance( lat1, lng1, lat2, lng2){
  2. var radLat1 = lat1*Math.PI / 180.0;
  3. var radLat2 = lat2*Math.PI / 180.0;
  4. var a = radLat1 - radLat2;
  5. var b = lng1*Math.PI / 180.0 - lng2*Math.PI / 180.0;
  6. var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
  7. Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
  8. s = s *6378.137 ;// EARTH_RADIUS;
  9. s = Math.round(s * 10000) / 10000;
  10. return s;
  11. }
  12. // 调用 return的距离单位为km
  13. GetDistance(10.0,113.0,12.0,114.0)

PHP


代码如下

  1. private final static double EARTH_RADIUS = 6378.137;//地球半径
  2. private static double rad(double d) {
  3. return d * Math.PI / 180.0;
  4. }
  5. /**
  6. * 计算两点间距离
  7. * @return double 距离 单位km,精确到米

    */
  8. public static double GetDistance(double lat1, double lng1, double lat2, double lng2) {
  9. double radLat1 = rad(lat1);
  10. double radLat2 = rad(lat2);
  11. double a = radLat1 - radLat2;
  12. double b = rad(lng1) - rad(lng2);
  13. double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
  14. Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
  15. s = s * EARTH_RADIUS;
  16. s = new BigDecimal(s).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
  17. return s;
  18. }

小程序,定位,范围内定位

您看完此新闻的心情是
收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!

热评话题

按钮 内容不能为空!
立刻说两句吧! 查看0条评论

手机扫码访问

Scan me!