111
rk
2025-08-21 10c77061473979a78529139d1ed4cbb70353ba73
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.doumee.core.utils;
 
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/7/15 9:57
 */
public class GeoUtils {
    // 将角度转换为弧度
    private static double toRadians(double angle) {
        return angle * Math.PI / 180.0;
    }
 
    // 计算两点间的距离(单位:公里)
    public static double haversineDistance(double lat1, double lon1, double lat2, double lon2) {
        // 将经纬度转换为弧度
        double dLat = toRadians(lat2 - lat1);
        double dLon = toRadians(lon2 - lon1);
        lat1 = toRadians(lat1);
        lat2 = toRadians(lat2);
 
        // 应用Haversine公式
        double a = Math.pow(Math.sin(dLat / 2), 2) + Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);
        double c = 2 * Math.asin(Math.sqrt(a));
        // 地球半径,单位:公里
        int R = 6371;
        return R * c;
    }
 
    public static void main(String[] args) {
        double lat1 = 30.660622; // 纽约纬度
        double lon1 = 114.172; // 纽约经度
        double lat2 = 30.621857; // 洛杉矶纬度
        double lon2 = 114.12311; // 洛杉矶经度
 
        double distance = haversineDistance(lat1, lon1, lat2, lon2);
        System.out.printf("Distance: %.2f km%n", distance);
    }
 
}