【GT-JAVA开发计算两点之间距离】

前言:目前大多数的公司都在使用钉钉进行签到打卡,使用过的都知道钉钉打卡是基于位置的,也就是说你必须在一个特定的范围内打卡,超过这个范围的只能外勤打卡,这一功能是如何实现的呢?

    在读书的时候,大家应该都学过球面两点之间距离的计算,由于我长时间没有学习了,也无心再去拾起数学,因此只是提供一个大致的思路和实现源码。我们可以把地球看做一个不太规则的球体,赤道长度则看做球体的直径。我们都知道在地理坐标系中有两个角值,分别是经度和纬度,他们可以用来代表地球上的某一点。

 球面两点之间距离计算公式:d(x1,y1,x2,y2)=r*arccos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y1-y2))

  咱们假设两地的经纬度已经获取到了(后面单独发表一篇文章记录安卓获取当前经纬度),定义PI值为3.14159265358979323,地球半径取6371229,代码如下:

    public double getDistance(double longt1, double lat1, double longt2,double lat2) 
{
   
          double x, y, distance;
        
          x = (longt2 - longt1) * PI * R* Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180;
  
          y = (lat2 - lat1) * PI * R / 180;
        
          distance = Math.hypot(x, y);
        
          return distance;

}

PS:经测试,上述代码计算结果与百度地图结果误差在0.02之内

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值