使用航空公式(Lat/lon 给定半径和距离);经度没有 return

Using aviation formula (Lat/lon given radial and distance); longitude does not return

这是计算给定半径和距离的 lat/lon 的公式,可在此处找到:http://williams.best.vwh.net/avform.htm#LL

lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
 IF (cos(lat)=0)
    lon=lon1      // endpoint a pole
 ELSE
    lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
 ENDIF

这是我目前使用的代码(所有输入和输出都以弧度计算):

nx = Math.asin(Math.sin(lat0) * Math.cos(d) + Math.cos(lat0) * Math.sin(d) * Math.cos(c));

ny = mod(lon0 - Math.asin(sin(c) * Math.sin(d) / Math.cos(lat1)) + Math.PI, 2 * Math.PI) - Math.PI;

return [nx, ny];

}

nx 打印没有问题,但是 ny 不打印。

如果mod是取模运算符

变化:

ny = mod(lon0 - Math.asin(sin(c) * Math.sin(d) / Math.cos(lat1)) + Math.PI, 2 * Math.PI) - Math.PI;

// ....................vvvvv note, I spotted this omission as well
ny =((lon0 - Math.asin(Math.sin(c) * Math.sin(d) / Math.cos(lat1)) + Math.PI) % (2 * Math.PI)) - Math.PI;

或创建函数

function mod(a, b) {
    return a % b;
}

但是,您需要弥补数学方面的不足。以上