使用航空公式(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;
}
但是,您需要弥补数学方面的不足。以上
这是计算给定半径和距离的 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;
}
但是,您需要弥补数学方面的不足。以上