VBA半胱氨酸配方

我正在尝试将Haversine公式引入excel函数。 它看起来像这样:

Public Function Haversine(Lat1 As Variant, Lon1 As Variant, Lat2 As Variant, Lon2 As Variant) Dim R As Integer, dlon As Variant, dlat As Variant, Rad1 As Variant Dim a As Variant, c As Variant, d As Variant, Rad2 As Variant R = 6371 dlon = Excel.WorksheetFunction.Radians(Lon2 - Lon1) dlat = Excel.WorksheetFunction.Radians(Lat2 - Lat1) Rad1 = Excel.WorksheetFunction.Radians(Lat1) Rad2 = Excel.WorksheetFunction.Radians(Lat2) a = Sin(dlat / 2) * Sin(dlat / 2) + Cos(Rad1) * Cos(Rad2) * Sin(dlon / 2) * Sin(dlon / 2) c = 2 * Excel.WorksheetFunction.Atan2(Sqr(a), Sqr(1 - a)) d = R * c Haversine = d End Function 

但是,当我testing它时,我得到了错误的距离…我不明白为什么。 对于本主题中使用的坐标: 函数来计算两个坐标之间的距离显示错误我得到20013,44作为输出。 谁知道这里有什么问题? 不能find我的错误…

Atan2在Excel中定义为与JavaScript相比,即Atan2(x,y)而不是Atan2(y,x)。

你需要颠倒两个参数的顺序:

 c = 2 * Excel.WorksheetFunction.Atan2(Sqr(1 - a), Sqr(a)) 

看到这个

所以

 =haversine(59.3293371,13.4877472,59.3225525,13.4619422) 

 1.65 km 

这是与乌鸦正确的距离。