java计算根据两组经纬度计算之间距离


    public Result campusQueryByLatAndLng(double lng1, double lat1,Double temp) {
        // 计算2.5km内  0.048=500m
        if (temp == null) {
            temp = 0.024;
        }
        // 0.012246 0.01125
        // 0.0225  0.0225
        // 0.0192
        List<CampusQueryPo> campusQueryPos = campusQueryMapper.campusQueryByLatAndLng(lng1, lat1, temp,temp);
        List<CampusQueryVo> campusQueryVoList = new ArrayList<>();
        for (CampusQueryPo campusQueryPo : campusQueryPos) {
            Double distance = getDistance(campusQueryPo.getLongitude(), campusQueryPo.getLatitude(), lng1, lat1);
            String stance = String.format("%.2fm", distance);
            if (distance > 1000) {
                stance = String.format("%.2fkm", distance / 1000.0);
            }
            CampusQueryVo campusQueryVo = CampusQueryVo.builder()
                    .address(campusQueryPo.getAddress())
                    .camName(campusQueryPo.getCamName())
                    .distance(stance)
                    .subway(campusQueryPo.getSubway())
                    .properties(campusQueryPo.getProperties())
                    .region(campusQueryPo.getRegion())
                    .build();
            campusQueryVoList.add(campusQueryVo);
        }
        System.out.println("一共" + campusQueryPos.size() + "条数据");
        return ResultUtil.SUCCESS(campusQueryVoList);
    }

    private double getDistance(double lng1, double lat1, double lng2, double lat2) {
        double PI = 3.14159265358979323; // 圆周率
        double R = 6371229; // 地球的半径
        double x, y, distance;
        x = (lng2 - lng1) * PI * R
                * Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180;
        y = (lat2 - lat1) * PI * R / 180;
        distance = Math.hypot(x, y);
        return distance;
    }
SELECT * from campus_query " +
            " where (latitude between #{lat1}-#{tempLat} and #{lat1}+#{tempLat}) and (longitude between #{lng1}-#{tempLng} and  #{lng1}+#{tempLng})

参考文章:https://www.jianshu.com/p/678b19c21364

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值