- 获取两点经纬度的具体的值,计算两地经度和纬度只差,使用Math包内提供的三角函数,进行计算
public final class DistanceUtils {
/**
* 地球半径,单位 km
*/
private static final double EARTH_RADIUS = 6378.137;
public static void main(String[] args) {
double d = getDistance(116.308479, 39.983171, 116.353454, 39.996059);
System.out.println(d);
}
/**
* 根据经纬度,计算两点间的距离
*
* @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;
}
}
数学公式
球面距离公式是计算球面上两点间距离的公式。设所求点A ,纬度角β1 ,经度角α1 ;点B ,纬度角β2 ,经度角α2。则距离S=R·arc cos[cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2],其中R为球体半径。
其中,用到的函数分别是
- Math.pow(x,y) //这个函数是求x的y次方
- Math.toRadians //将一个角度测量的角度转换成以弧度表示的近似角度
- Math.sin //正弦函数
- Math.cos //余弦函数
- Math.sqrt //求平方根函数
- Math.asin //反正弦函数
以上,是笔者粗浅的理解和实现
当然,通过三角函数变换,计算方法的实现还有其他写法,欢迎大家补充,
该博客介绍了一个Java类`DistanceUtils`,用于计算地球上两点之间的距离。通过将经纬度转换为弧度,然后应用球面距离公式,结合Math库的三角函数,实现了从经纬度坐标计算距离的功能。博客内容涵盖了Math.pow、Math.toRadians、Math.sin、Math.cos、Math.sqrt和Math.asin等函数的使用,并提供了详细的公式解释。
2279

被折叠的 条评论
为什么被折叠?



