java计算两个经纬度之间的直线距离
时间: 2023-10-14 11:11:47 浏览: 130
可以使用Haversine公式来计算。以下是Java代码示例:
```
public static final double R = 6371; // 地球半径
public static double distance(double lat1, double lng1, double lat2, double lng2) {
double radLat1 = Math.toRadians(lat1);
double radLat2 = Math.toRadians(lat2);
double a = radLat1 - radLat2;
double b = Math.toRadians(lng1) - Math.toRadians(lng2);
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 * R;
return s;
}
```
其中,lat1、lng1和lat2、lng2分别表示两个经纬度的纬度和经度,函数返回值为两点之间的距离(单位:公里)。
相关问题
Java计算两个经纬度的直线距离
计算两个经纬度之间的直线距离可以使用 Haversine 公式。以下是一个 Java 实现:
```java
public class DistanceCalculator {
private static final double EARTH_RADIUS = 6371; // 地球半径,单位为公里
/**
* 计算两个经纬度之间的直线距离
*
* @param lat1 第一个点的纬度,单位为度
* @param lng1 第一个点的经度,单位为度
* @param lat2 第二个点的纬度,单位为度
* @param lng2 第二个点的经度,单位为度
* @return 两点之间的距离,单位为公里
*/
public static double calculateDistance(double lat1, double lng1, double lat2, double lng2) {
double radLat1 = Math.toRadians(lat1);
double radLng1 = Math.toRadians(lng1);
double radLat2 = Math.toRadians(lat2);
double radLng2 = Math.toRadians(lng2);
double a = Math.sin((radLat1 - radLat2) / 2) * Math.sin((radLat1 - radLat2) / 2)
+ Math.cos(radLat1) * Math.cos(radLat2) * Math.sin((radLng1 - radLng2) / 2) * Math.sin((radLng1 - radLng2) / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return EARTH_RADIUS * c;
}
}
```
使用示例:
```java
double distance = DistanceCalculator.calculateDistance(39.908714, 116.397389, 31.230416, 121.473701);
System.out.println(distance); // 1068.63 公里
```
其中,39.908714 和 116.397389 是北京的经纬度,31.230416 和 121.473701 是上海的经纬度。计算结果为 1068.63 公里。
JAVA计算两个经纬度间距离
在Java中,计算两个经纬度之间的距离通常会使用Haversine公式,这个公式考虑了地球的球面形状。以下是一个简单的示例,展示了如何计算地球上两点间的直线距离:
```java
public class DistanceCalculator {
private static final int EARTH_RADIUS = 6371; // 地球平均半径,单位为公里
public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
// Haversine公式的一部分
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return EARTH_RADIUS * c;
}
}
```
在这个例子中,`calculateDistance()`函数接受四个参数:两个经纬度对的经度和纬度。首先将它们转换为弧度,然后应用Haversine公式来计算距离。返回的结果是以公里为单位的距离。
如果你需要精确到千米、米或其他单位,只需调整`EARTH_RADIUS`的值即可。
阅读全文