指向大圆段距离

时间:2017-08-09 10:04:08

标签: geometry distance point wgs84 great-circle

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

enter image description here

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

2 个答案:

答案 0 :(得分:3)

这是跨轨道距离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)

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

答案 1 :(得分:2)

  1. 球形到2D笛卡儿

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

    1. 计算交叉点
    2. 转换回球形
    3. 计算点和交点之间的arclength

      很难说你是否正在使用球体或WGS84或者什么......

  2. 笛卡尔3D

    您可以将圆弧段处理为3D线,并且当找到交叉点时将其投影回曲面上。像这样:

    3D cartesian + projection

    1. 在3D Cartesian
    2. 中从点交点找到线与法线
    3. 将其投射回表面

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

    4. 计算2点之间的arclength

      对于球面也很简单,只计算交点和点之间的角度......

      ang = acos(dot(intersection,point)); // [radians]
      

      并转换为arclength

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