public final class DistanceUtils { /** * 地球半徑,單位 km */ private static final double EARTH_RADIUS = 6378.137; /** * 根據經緯度,計算兩點間的距離 * * @param longitude1 第一個點的經度 * @param latitude1 第一個點的緯度 * @param longitude2 第二個點的經度 * @param latitude2 第二個點的緯度 * @return 返回距離 單位千米 */ public static double getDistance(double longitude1, double latitude1, double longitude2, double latitude2) { // 緯度 double lat1 = Math.toRadians(latitude1); double lat2 = Math.toRadians(latitude2); // 經度 double lng1 = Math.toRadians(longitude1); double lng2 = Math.toRadians(longitude2); // 緯度之差 double a = lat1 - lat2; // 經度之差 double b = lng1 - lng2; // 計算兩點距離的公式 double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2))); // 弧長乘地球半徑, 返回單位: 千米 s = s * EARTH_RADIUS; return s; } public static void main(String[] args) { double d = getDistance(116.308479, 39.983171, 116.353454, 39.996059); System.out.println(d); } }