package com.ruoyi.staff.utils; // 工具类:计算两个经纬度之间的距离(球面距离) public class LocationUtils { private static final double EARTH_RADIUS = 6371000; // 地球半径,单位米 /** * 计算两个经纬度之间的距离(米) * @param lat1 第一个点纬度 * @param lon1 第一个点经度 * @param lat2 第二个点纬度 * @param lon2 第二个点经度 * @return 距离(米) */ public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) { // 转弧度 double radLat1 = Math.toRadians(lat1); double radLon1 = Math.toRadians(lon1); double radLat2 = Math.toRadians(lat2); double radLon2 = Math.toRadians(lon2); // 差值 double deltaLat = radLat1 - radLat2; double deltaLon = radLon1 - radLon2; // 球面距离公式 double distance = 2 * Math.asin(Math.sqrt( Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(deltaLon / 2), 2) )); distance = distance * EARTH_RADIUS; // 保留两位小数 distance = Math.round(distance * 100) / 100.0; return distance; } }