【发布时间】:2012-11-08 00:54:39
【问题描述】:
我想在 Excel 中用 P1(lat1,long2) 和 P2(lat2 long2) 计算 2 点之间从北方的航向。
【问题讨论】:
-
您这样做的具体问题是什么?几秒钟后,谷歌得到了我这个:movable-type.co.uk/scripts/latlong.html
我想在 Excel 中用 P1(lat1,long2) 和 P2(lat2 long2) 计算 2 点之间从北方的航向。
【问题讨论】:
这取决于您要寻找的准确度级别。 Haversine formula 很简单,但可能还不够,因为它假设地球表面是一个完美的球体(事实并非如此)并且只提供有限的精度。
Vincenty's formulae 提供更好的测地线等级精度(1.46E-6 度) .
我整理的 VBA Excel 实现可以在 GitHub 上找到:https://github.com/tdjastrzebski/Vincenty-Excel。VincentyInvFwdAzimuth() 函数应该可以满足您的需求。
【讨论】:
我有一个用于业余无线电计算的函数。 “纯”公式对我来说太庞大了。
Function BearingFromCoord(lat_base_deg, long_base_deg, lat_dest_deg, long_dest_deg As Single) As Long
Dim rad_deg_factor As Single
Dim long_diff As Single
Dim frac0 As Single
Dim frac1 As Single
Dim frac2 As Single
Dim lat_base As Single
Dim long_base As Single
Dim lat_dest As Single
Dim long_dest As Single
Dim bearing As Single
rad_deg_factor = 360 / (2 * pi())
long_diff = (long_base_deg - long_dest_deg) / rad_deg_factor
lat_base = lat_base_deg / rad_deg_factor
lat_dest = lat_dest_deg / rad_deg_factor
frac0 = Sin(lat_base) * Sin(lat_dest) _
+ Cos(lat_base) * Cos(lat_dest) _
* Cos(long_diff)
bearing = rad_deg_factor * Application.WorksheetFunction.Acos((Sin(lat_dest) _
- Sin(lat_base) * frac0) _
/ (Cos(lat_base) * Sin(WorksheetFunction.Acos(frac0))))
If Sin(long_diff) < 0 Then
BearingFromCoord = bearing
Else
BearingFromCoord = 360 - bearing
End If
End Function
Private Function pi() As Single
pi = 3.1415926535
End Function
【讨论】: