【发布时间】:2017-12-28 13:10:06
【问题描述】:
我正在尝试使用半正弦公式计算两个地理坐标之间的公里距离。
代码:
Dim dbl_dLat As Double
Dim dbl_dLon As Double
Dim dbl_a As Double
dbl_P = WorksheetFunction.Pi / 180
dbl_dLat = dbl_P * (dbl_Latitude2 - dbl_Latitude1)
dbl_dLon = dbl_P * (dbl_Longitude2 - dbl_Longitude1)
dbl_a = Sin(dbl_dLat / 2) * Sin(dbl_dLat / 2) + Cos(dbl_Latitude1 * dbl_P) * Cos(dbl_Latitude2 * dbl_P) * Sin(dbl_dLon / 2) * Sin(dbl_dLon / 2)
dbl_Distance_KM = 6371 * 2 * WorksheetFunction.Atan2(Sqr(dbl_a), Sqr(1 - dbl_a))
我正在使用这些坐标进行测试:
dbl_Longitude1 = 55.629178
dbl_Longitude2 = 29.846686
dbl_Latitude1 = 37.659466
dbl_Latitude2 = 30.24441
并且代码返回20015.09,这显然是错误的。根据 Yandex 地图,应该是 642 公里。
我哪里错了?经度和纬度的格式是否错误?
【问题讨论】:
-
为什么不用
Lon而不是dbl_dLon?那些伪匈牙利语前缀真的有助于提高代码的可靠性吗?这绝对对可读性部门没有帮助。 -
欢迎来到本站!查看tour 了解有关该站点如何运行的更多信息。您可以edit your question 包含更多信息。在这种情况下,给定的坐标是2512 km apart。请您再次检查您的输入坐标好吗?
-
@cxw 对不起,dbl_Longitude2 应该读作 59.846686(那么这些点距离 642 公里)。无论如何,正如您所指出的,问题在于 Atan2 函数的参数放置错误。
-
@User24112017 感谢您的更新!顺便说一句,请不要在 at 符号后加空格 ---
@cxw应该通知我,但@ cxw没有。
标签: vba excel worksheet-function geographic-distance