【问题标题】:Which one of these azimuth values is the right one? And why?这些方位角值中哪一个是正确的?为什么?
【发布时间】:2014-08-28 16:03:13
【问题描述】:

首先,让我们明确一点,我想要地球表面的方位角,即两个位置之间的角度,例如纽约和莫斯科。

我正在用我的 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;

在Calculator 2,我得到 90º。

在 PostGIS 中,我得到 270º

在Calculator 1,我得到 180º。

我知道方位角在两极附近变得越来越扭曲,但这正是我在这些地点进行测试的原因。各种不同的解决方案让我感到困惑。您能帮我找到正确的答案吗?

【问题讨论】:

    标签: javascript postgis azimuth geodesic-sphere


    【解决方案1】:

    这取决于用于方位角的参考,例如map-types 使用 0° 表示北,正数表示顺时针,而 math-types 使用 0° 表示东,正数表示逆时针。

    坐标对 A(-170, -89) 和 B(10, 89) 是antipodes,这是查找最小距离和方位角的特殊情况。您可以通过思考练习来回答您的问题。

    首先注意地球的半周长是:

    • 赤道:20037.5085 公里
    • 子午线(南北向):20003.93 公里

    对于北极和南极上的一对对跖点,有无数个方位角,因为沿每个经度的距离是相同的。 (你会从南极到北极的哪个方向?)

    对于赤道上的一对对跖点,最短的距离是北或南,因为它沿经向方向略短。

    对于任何其他对映体,其答案与赤道相同:北或南。


    更新

    使用 PostGIS SQL 查询进一步调查问题:

    SELECT ST_Distance(A, B), degrees(ST_Azimuth(A, B))
    FROM (
      SELECT 'POINT(-170 -89)'::geography A, 'POINT(10 89)'::geography B
    ) f;
    

    对于 PostGIS 2.0 和 2.1,不正确的结果是:

       st_distance   |     degrees
    -----------------+------------------
     20003900.583699 | 270.005278779849
    

    但是使用 PostGIS 2.2(和 PROJ 4.9.1),现在正确的结果是:

       st_distance    | degrees
    ------------------+---------
     20003931.4586255 |     180
    

    【讨论】:

    • 确实,很多解都是有效的,但如果你考虑扁球体,北和南是正确的解。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2011-01-07
    • 1970-01-01
    • 2013-09-16
    相关资源
    最近更新 更多