1. 已知基点的经纬度,根据方位角和运动距离求另外一点的经纬度
1.1 需求概述及图解
假设方位角是α, 那从点1到点2的平移距离分别如下所示dsinα, dcosα。 这里正北为0度。已知基点(点1)经纬度(long1, lat1)和距离d。 求点2的经纬度(long2,lat2)
1.2 求当前的切面半径
Φ是当前基点(点1)的纬度值。则当前的纬度的切面半径 arc = ARCcos(Φ) ,其中Φ其实就是当前的方位的纬度值,即arc = ARCcos(lat1)
1.3 地球平均半径
地球的平均半径 大约3959英里(6371.393千米) 。这个数字是地心到地球表面所有各点距离的平均值。这里取平均半径那么ARC=6371.393*1000(米)1.4 计算思路
计算第二点的经度,就是 水平平移的距度(dsinα)除以 当前纬度切面周长(2πarc)。再除以360度 ,就知道了水平横向平移了多少度,再加上long1,就是long2的值了。
计算第二点的纬度,比较简单,就是, 垂直平移的距离d(d*cosα)除以 地球纵向周长,再除以360度,就知道纵向平移了多少度,再加上lat1,就知道lat2的值了。
long2 = long1 + dsinα/[ARCcos(lat1)*2π/360]lat2 = lat1 +d*cosα/ (ARC *2π/360)总结:
1.5 Java代码实现
/*** MethodName: calcLatAndlon* Description:** @date /9/21 20:35* @params: [posX 终点位置X轴的位置信息, posY 终点位置Y轴的位置信息, basePointLongitude 基点的GPS经度坐标,* basePointLatitude 基点的GPS纬度坐标, azimuth 方位角(弧度), distance 2点之间的直线距离]* @author Tianjiao*/public void calcLatAndlon(double basePointLongitude, double basePointLatitude, double azimuth, double distance) {// 地球半径 单位米(m)double arc = 6371.393 * 1000;// 终点的经度坐标double longitude = basePointLongitude + distance * Math.sin(azimuth) / (arc * Math.cos(basePointLongitude) * 2 * Math.PI / 360);// 终点的纬度坐标double latitude = basePointLatitude + distance * Math.cos(azimuth) / (arc * 2 * Math.PI / 360);}