最近做地图上轨迹计算方位角的时候,需要计算两个经纬度点之间的方位角,这里把计算过程记录分享一下。
一:思路
要计算两个经纬度点之间的夹角(通常称为方位角或初始方位角),你可以使用大圆距离公式或者一些近似方法。 假设你有两个点,点A(纬度LatA, 经度LonA)和点B(纬度LatB, 经度LonB)。你可以使用以下公式来计算从点A到点B的方位角(以度为单位): 计算经纬度差值(以弧度为单位): ΔLon = LonB - LonA ΔLat = LatB - LatA 使用以下公式计算方位角(单位为弧度): θ = atan2(sin(ΔLon) * cos(LatB), cos(LatA) * sin(LatB) - sin(LatA) * cos(LatB) * cos(ΔLon)) 最后将方位角从弧度转换为度: θ_deg = θ * (180 / π) 由于地球是一个椭球体,不是完美的球体,因此上述公式在长距离或高纬度地区可能不够精确。对于需要更高精度的应用,你可能需要使用更复杂的地理计算方法或库。上诉公式只能大概计算
二:实例代码
//计算旋转角度
function getAngle( lon1, lat1, lon2,lat2) {
const deg2rad = Math.PI / 180;
const dlat = (lat2 - lat1) * deg2rad;
const dlon = (lon2 - lon1) * deg2rad;
const y = Math.sin(dlon) * Math.cos(lat2 * deg2rad);
const x = Math.cos(lat1 * deg2rad) * Math.sin(lat2 * deg2rad) - Math.sin(lat1 * deg2rad) * Math.cos(lat2 * deg2rad) * Math.cos(dlon);
const angle = Math.atan2(y, x) * 180 / Math.PI;
return angle;
}
// 示例用法
var lat1 = 39.907522; // 纬度1
var lon1 = 116.3972333; // 经度1
var lat2 = 31.230422; // 纬度2
var lon2 = 121.473733; // 经度2
var bearing = getAngle( lon1, lat1, lon2,lat2);
console.log("方位角(初始方位角)是: " + bearing + "°");
|