通过经纬度来计算相对距离,精确到10米以内。

@Component
public class LocationUtils {
    private static final double EARTH_RADIUS = 6371000; // 地球半径,单位为米

    //这是一个判断地理位置的方法,通过传入的经纬度来换算成米,再来判断学生是否签到成功!0为未签到成功,1为签到成功
    public static double calculate(double lat1, double lon1, double lat2, double lon2) {
        double radLat1 = Math.toRadians(lat1);
        double radLon1 = Math.toRadians(lon1);
        double radLat2 = Math.toRadians(lat2);
        double radLon2 = Math.toRadians(lon2);

        double a = Math.sin((radLat2 - radLat1) / 2) * Math.sin((radLat2 - radLat1) / 2)
                + Math.cos(radLat1) * Math.cos(radLat2) * Math.sin((radLon2 - radLon1) / 2) * Math.sin((radLon2 - radLon1) / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        return EARTH_RADIUS * c;
    }

    public boolean ischeckinlocation(Double weidu, Double jingdu, Double teaTodayCheckVoWeidu, Double teaTodayCheckVoJingdu, int allowmaxloc) {
        Double distance = calculate(weidu, jingdu, teaTodayCheckVoWeidu, teaTodayCheckVoJingdu);
        if(distance<=allowmaxloc*100){
            System.out.println("距离是"+distance+"且在");
            return true;
        }
        System.out.println("距离是:"+distance+"且不在");
        return false;
    }

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值