2

我想在excel中用P1(lat1,long2)和P2(lat2 long2)计算2个点之间的北方航向。

4

2 回答 2

1

这取决于您要寻找的准确度级别。Haversine 公式很简单,但可能还不够,因为它假设地球表面是一个完美的球体(事实并非如此)并且仅提供有限的准确性。
Vincenty 的公式提供了更好的测地线等级精度(1.46E-6 度)。
我整理的 VBA Excel 实现可以在 GitHub 上找到:https ://github.com/tdjastrzebski/Vincenty-Excel 。
VincentyInvFwdAzimuth()功能应该可以满足您的需求。

于 2018-06-21T12:00:42.173 回答
0

我有一个用于业余无线电计算的函数。一个“纯”的公式对我来说太笨重了。

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
于 2012-11-08T07:22:42.133 回答