指向大圆弧段距离

Point to great-circle segment distance

我想计算从经纬度给定的点到两点给定的线段(大圆的一部分)的距离。所有坐标均在 WGS84 中给出。

我知道如何在笛卡尔坐标系中计算,但不知道如何在球体上计算。有人可以提供公式吗?

  1. 球形到二维笛卡尔

    如果距离不是太远并且不在极点奇点附近,您可以将线段和从您的点发射并垂直于您的线段的线转换为球坐标(如果它们还没有)并将这两个角度用作笛卡尔 space(忽略半径)。

    1. 计算交点

    2. 转换回球形

    3. 计算点和交点之间的弧长

      很难说您使用的是 sphere 还是 WGS84 还是什么....

  2. 笛卡尔 3D

    让弧段 AB、半径球体 R 和中心 C(理想情况下 (0,0,0))和点 P 然后我看到它这个:

    1. 在 3D 笛卡尔ABC 平面和它的法线通过点 P 之间找到交点 P' =28=]

    2. 将其投影回球体表面

      对于球面来说这很容易,因为投影意味着只需将矢量 P'C 长度更改为 R(如果球体以 (0,0,0) 为中心)。

      P'' = (R*(P'-C)/|P'-C|) + C
      
    3. 计算两点之间的弧长|P-P''|

      对于球面也很简单,只需计算向量 P-CP''-C

      之间的角度
      ang = acos(dot(P-C,P''-C)/(R*R)); // [radians]
      

      并转换为弧长

      d = ang*R; // [same Units as R]
      

这是交叉轨道距离described here

dxt = asin( sin(δ13) ⋅ sin(θ13−θ12) ) ⋅ R
    where
 δ13 is (angular) distance from start point to third point
     θ13 is (initial) bearing from start point to third point
     θ12 is (initial) bearing from start point to end point
     R is the earth’s radius

您可以使用给定页面中的公式计算所需的距离和方位角

distance
a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)
c = 2 ⋅ atan2( √a, √(1−a) )
d = R ⋅ c
where   
 φ is latitude, λ is longitude, R is earth’s radius (mean radius = 6,371km);

bearing
θ = atan2( sin Δλ ⋅ cos φ2 , cos φ1 ⋅ sin φ2 − sin φ1 ⋅ cos φ2 ⋅ cos Δλ )
    where
φ1,λ1 is the start point, φ2,λ2 the end point (Δλ is the difference in longitude)

请注意,角度需要以弧度为单位才能传递给三角函数