问题:我们在解决经纬度问题中,会遇到这样一个问题:
在地图上我们会 有一个A点坐标(x1,y1) 我要向某个方向 前进 d 米 到达B点,求B点的坐标,我们可以用java代码实现
/**
*
* @param lat1 变化前的经度
* @param lon1 变化前的纬度
* @param dirDeg 车的方向 (0~360° 其中正东方向为0° 逆时针旋转为正方向)
* @param distance 前进的距离距离(单位m)
* @return 修正后的经度和纬度
*/
public static double[] calculateNewPosition(double lat1, double lon1, double dirDeg, double distance) {
// 如果方向不是以正东方向为0° 需要自行转换角度
// 角度转换
double dirRad = Math.toRadians(dirDeg);
// 地球半径 单位米(m)
double arc = 6371.393 * 1000;
// 终点的经度坐标
double longitude = lon1 + distance * Math.sin(dirRad) / (arc * Math.cos(lon1) * 2 * Math.PI / 360);
// 终点的纬度坐标
double latitude = lat1 + distance * Math.cos(dirRad) / (arc * 2 * Math.PI / 360);
return new double[]{latitude, longitude};
}