首先,让我们明确一点,我想要地球表面的方位角,即两个位置之间的角度,例如纽约和莫斯科。
我正在用我的 JS 函数测试一些方位角计算(如下所示)。对于点 A(-170, -89) 到 B(10, 89),我得到 ~90º。
球面方位角的 JS 函数(来自维基百科)
var dLon = lon2 - lon1;
var y = Math.sin(dLon) * Math.cos(lat2);
var x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon);
var angle = Math.atan2(y, x) * 180 / Math.PI;
扁球体上方位角的 JS 函数(来自维基百科)
var dLon = lon2 - lon1;
var f = 1 / 298.257223563; /* Flattening for WGS 84 */
var b = (1 - f) * (1 - f);
var tanLat2 = Math.tan(lat2);
var y = Math.sin(dLon);
var x;
if (lat1 === 0) {
var x = b * tanLat2;
} else {
var a = f * (2 - f);
var tanLat1 = Math.tan(lat1);
var c = 1 + b * tanLat2 * tanLat2;
var d = 1 + b * tanLat1 * tanLat1;
var t = b * Math.tan(lat2) / Math.tan(lat1) + a * Math.sqrt(c / d);
var x = (t - Math.cos(dLon)) * Math.sin(lat1);
}
var angle = Math.atan2(y, x) * 180 / Math.PI;
在计算器 2中,我得到 90º。
在 PostGIS 中,我得到 270º
在计算器 1中,我得到 180º。
我知道方位角在两极附近变得越来越扭曲,但这正是我在这些地点进行测试的原因。各种不同的解决方案让我感到困惑。你能帮我得到正确的答案吗?