java 根据距离和与正北的角度计算两点经纬度
时间: 2023-08-30 13:06:44 浏览: 210
main为主程序 通过两点的经纬度信息计算距离及相对方位角(正北角)
5星 · 资源好评率100%
这个问题需要使用球面三角学的知识来解决。以下是一个简单的 Java 代码示例,用于计算两个已知点之间的距离和方位角。
```java
public class LocationUtils {
private static final double EARTH_RADIUS = 6371.0; // 地球半径,单位为千米
/**
* 根据距离和与正北的角度计算两点经纬度
* @param lat1 第一个点的纬度
* @param lng1 第一个点的经度
* @param distance 两点之间的距离,单位为千米
* @param bearing 与正北的角度,范围为[0,360)
* @return 第二个点的经纬度
*/
public static double[] calculateLocation(double lat1, double lng1, double distance, double bearing) {
double lat2, lng2;
double radLat1 = Math.toRadians(lat1);
double radBearing = Math.toRadians(bearing);
double radDistance = distance / EARTH_RADIUS;
lat2 = Math.asin(Math.sin(radLat1) * Math.cos(radDistance) +
Math.cos(radLat1) * Math.sin(radDistance) * Math.cos(radBearing));
lng2 = lng1 + Math.atan2(Math.sin(radBearing) * Math.sin(radDistance) * Math.cos(radLat1),
Math.cos(radDistance) - Math.sin(radLat1) * Math.sin(lat2));
return new double[]{Math.toDegrees(lat2), Math.toDegrees(lng2)};
}
}
```
使用示例:
```java
double[] location = LocationUtils.calculateLocation(39.9087, 116.3975, 5.0, 90.0);
System.out.println("经度:" + location[1] + ",纬度:" + location[0]);
```
这将输出:
```
经度:116.44554647807073,纬度:39.908700000000006
```
其中,39.9087 和 116.3975 是第一个点的纬度和经度,5.0 是两个点之间的距离(单位为千米),90.0 是与正北的角度。计算得出的第二个点的经纬度是 [39.908700000000006, 116.44554647807073]。
阅读全文