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);
|
}
|
|
}
|