知道两个地方的经纬度,计算两点的距离
/**
* @ClassName: CoordinateUtils
* @Description: 计算两点经纬度距离
* @author: ruyi
* @date: 2022/1/6 19:52
*/
public class CoordinateUtils {
/**
* 6378.137为地球半径(单位:千米)
*/
private static final double EARTH_RADIUS = 6378.137;
/**
* longitude1、latitude1 表示A点经纬度,
* longitude2、latitude2 表示B点经纬度,计算出来的结果单位为千米
*/
public static double loadDistance(double longitude1, double latitude1, double longitude2, double latitude2) {
double radLat1 = angleConvertRadians(longitude1);
double radLat2 = angleConvertRadians(longitude2);
// a 是两坐标点的纬度之差
double a = angleConvertRadians(longitude1) - angleConvertRadians(longitude2);
// b 是两坐标点的经度之差
double b = angleConvertRadians(latitude1) - angleConvertRadians(latitude2);
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
// 转为米,用 Math.round() 取整
s = Math.round(s * 1000);
return s;
}
/**
* 角度转弧度
* 把用角度表示的角转换为近似相等的用弧度表示的角 Math.toRadians。
* 经纬度是以度数(0-360)表示。如果要把度数转换为弧度(0-2π),要除以360再乘以2ππ(相当于,乘以π/ 180)。
**/
private static double angleConvertRadians(double d) {
return d * Math.PI / 180.0;
}
public static void main(String[] args) {
loadDistance(39.92099342895789, 116.41036033630371,39.91865656125718, 116.41190528869629);
}
}