Java生成两点间经纬度点直线代码


import java.util.ArrayList;
import java.util.List;
public class Test {

    public static void main(String[] args) {
        // 示例:生成两个点之间的经纬度点
        double lon1 = 96.780452728;
        double lat1 = 30.375989676;
        double lon2 = 111.128597260;
        double lat2 = 30.99122405;
        int numberOfPoints = 5;

        List<double[]> points = generateIntermediatePoints(lon1, lat1, lon2, lat2, numberOfPoints);

        // 输出结果
        for (int i = 0; i < points.size(); i++) {
            double[] point = points.get(i);
            System.out.printf("点%d: 经度=%.6f, 纬度=%.6f%n", i + 1, point[0], point[1]);
        }
    }

    public static List<double[]> generateIntermediatePoints(double lon1, double lat1, double lon2, double lat2, int numberOfPoints) {
        List<double[]> points = new ArrayList<>();
        if (numberOfPoints < 2) {
            points.add(new double[]{lon1, lat1});
            points.add(new double[]{lon2, lat2});
            return points;
        }

        double deltaLon = calculateDeltaLon(lon1, lon2);
        double deltaLat = lat2 - lat1;

        for (int i = 0; i < numberOfPoints; i++) {
            double t = i / (double) (numberOfPoints - 1);
            double lon = normalizeLongitude(lon1 + t * deltaLon);
            double lat = lat1 + t * deltaLat;
            points.add(new double[]{lon, lat});
        }

        return points;
    }

    private static double calculateDeltaLon(double lon1, double lon2) {
        double delta = lon2 - lon1;
        if (delta > 180.0) {
            delta -= 360.0;
        } else if (delta < -180.0) {
            delta += 360.0;
        }
        return delta;
    }

    private static double normalizeLongitude(double lon) {
        lon %= 360.0;
        if (lon < -180.0) {
            lon += 360.0;
        } else if (lon >= 180.0) {
            lon -= 360.0;
        }
        return lon;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值