如何在地球表面上找到一个点,给定一个原点、距离和方向(方位角)?

3
2个回答

3
这是我目前看到的最好的公式,来自于http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html
a, b = major & minor semiaxes of the ellipsoid   
f = flattening (a−b)/a   
φ1, φ2 = geodetic latitude   
s = length of the geodesic   
α1, α2 = azimuths of the geodesic (initial/final bearing)    

tanU1 = (1−f).tanφ1 (U is ‘reduced latitude’)    
cosU1 = 1/√(1+tan²U1), sinU1 = tanU1.cosU1 (trig identities; §6)     
σ1 = atan2(tanU1, cosα1)    (1)
sinα = cosU1.sinα1  (2)
cos²α = 1 − sin²α (trig identity; §6)    
u² = cos²α.(a²−b²)/b²    
A = 1+u²/16384.{4096+u².[−768+u².(320175.u²)]} (3)
B = u²/1024.{256+u².[−128+u².(7447.u²)]}   (4)

σ = s / b.A (1st approximation), σ′ = 2π     
while abs(σ−σ′) > 10-12 { (i.e. 0.06mm)  
        cos2σm = cos(2.σ1 + σ)  (5)
    Δσ = B.sinσ.{cos2σm + B/4.[cosσ.(−1 + 2.cos²2σm) − B/6.cos2σm.(−3 + 4.sin²σ).(−3 + 4.cos²2σm)]} (6)
    σ′ = σ   
    σ = s / b.A + Δσ    (7)
}        
φ2 = atan2(sinU1.cosσ + cosU1.sinσ.cosα1, (1−f).√[sin²α + (sinU1.sinσ − cosU1.cosσ.cosα1)²])    (8)
λ = atan2(sinσ.sinα1, cosU1.cosσ − sinU1.sinσ.cosα1)    (9)
C = f/16.cos²α.[4+f.(43.cos²α)]    (10)
L = λ − (1−C).f.sinα.{σ+C.sinσ.[cos2σm + C.cosσ.(−1 + 2.cos²2σm)]} (difference in longitude)    (11)
α2 = atan(sinα, −sinU1.sinσ + cosU1.cosσ.cosα1) (reverse azimuth)   (12)
p2 = (φ2, λ1+L)

2
这两个点有多远?我喜欢使用高斯-克吕格投影,如果这两个点距离在100海里左右以内,那么使用这种方法是可以的。它的优点是让你能够在本地空间内使用常规三角函数,并将其转换回大地坐标系。
如果它们之间的距离更远,则退回到大圆航线计算方法,并使用WGS-84椭球体在所需方位上给定点处的曲率半径作为圆的半径进行计算。

你确定是100纳米吗?难道不应该是100千米吗? - Jader Dias
1
我是指100海里...大约185公里。绝对不是纳米! :) - Chris Arguin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接