根据经纬度计算两点之间的距离,把计算的距离等分,并计算每等份的经纬度

 /**
     * 根据经纬度,计算两点间的距离
     *
     * @param longitude1 第一个点的经度
     * @param latitude1  第一个点的纬度
     * @param longitude2 第二个点的经度
     * @param latitude2  第二个点的纬度
     * @return 返回距离 单位千米
     */
    public  List<LatAndLog> getDistances(double longitude1, double latitude1, double longitude2, double latitude2,Integer d) {

        // 纬度
        double lat1 = Math.toRadians(latitude1);
        double lat2 = Math.toRadians(latitude2);
       /* BigDecimal lat1 = new BigDecimal( Math.toRadians(latitude1));
        BigDecimal lat2 = new BigDecimal( Math.toRadians(latitude2));*/

        // 经度
        double lng1 = Math.toRadians(longitude1);
        double lng2 = Math.toRadians(longitude2);
        /*BigDecimal lng1 = new BigDecimal( Math.toRadians(longitude1));
        BigDecimal lng2 = new BigDecimal( Math.toRadians(longitude2));*/
        // 纬度之差
        //BigDecimal a = lat2.subtract(lat1);
        double a=lat2-lat1;
        // 经度之差
        //BigDecimal b = lng2.subtract(lng1);
        double b=lng2-lng1;
        // 计算两点距离的公式
        BigDecimal ss=new BigDecimal("0.000000");
        BigDecimal yy=new BigDecimal("0.000000");

        double m=a/d;
        double n=b/d;


        List<LatAndLog> objects = new ArrayList<>();
       /* int q=a.compareTo(BigDecimal.ZERO);
        int w=b.compareTo(BigDecimal.ZERO);*/
        for(int i=1;i<d;i++){
            if(a>=0){
                yy=new BigDecimal(Math.toDegrees(lat1+i*m)).setScale(6,BigDecimal.ROUND_DOWN);
            }else {
                yy=new BigDecimal(Math.toDegrees(lat1-i*m)).setScale(6,BigDecimal.ROUND_DOWN);
            }
            if(b>=0){
                ss= new BigDecimal(Math.toDegrees(lng1+i*n)).setScale(6,BigDecimal.ROUND_DOWN);
            }else {
                ss= new BigDecimal(Math.toDegrees(lng1-i*n)).setScale(6,BigDecimal.ROUND_DOWN);
            }
            LatAndLog latAndLog = new LatAndLog();
            latAndLog.setLat(ss);
            latAndLog.setLng(yy);
            objects.add(latAndLog);
            System.out.println(ss+","+yy);
        }

        System.out.println(objects);
        return objects;
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值