【问题标题】:calculating heading from latitude and longitude in excel在excel中根据纬度和经度计算航向
【发布时间】:2012-11-08 00:54:39
【问题描述】:

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

【问题讨论】:

标签: excel heading


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2012-08-16
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多