我正在尝试使用vbscript将rhumb线的标题从一个纬度/经度转换到另一个纬度/经度。这类似于 rhumb line calculation - javascript to php
我也在尝试转换javascript代码 http://www.yourhomenow.com/house/haversine.html进入vbscript。
的Javascript
var dPhi = Math.log(Math.tan(lat2/2+Math.PI/4)/Math.tan(lat1/2+Math.PI/4));
var q = dLat/dPhi;
if (!isFinite(q)) q = Math.cos(lat1.toRad());
// if dLon over 180° take shorter rhumb across 180° meridian:
if (Math.abs(dLon) > Math.PI) {
dLon = dLon>0 ? -(2*Math.PI-dLon) : (2*Math.PI+dLon);
}
var d = Math.sqrt(dLat*dLat + q*q*dLon*dLon) * R; //ignoring this as I don't need distance
var brng = Math.atan2(dLon, dPhi).toBrng();
我的代码如下
Lat1 = -40.077
Long1 = 150.511
Lat2 = -44.665
Long2 = 167.919
Pi = 3.14159265358979
dPhi = log(tan(lat2/2+Pi/4)/tan(lat1/2+Pi/4))
dLat = Lat2-Lat1
dLon = Long2-Long1
if dLon > Pi then
if dLon>0 then
dLon = -(2*Pi-dLon)
else
dLon = (2*Pi+dLon)
end if
end if
num = Atan2(dLon, dPhi)
Rhumb = (num*180/Pi)+360 mod 360
Function Atan2(y,x)
Pi = 3.14159265358979
If x > 0 Then
Atn2 = Atn(y / x)
ElseIf x < 0 Then
Atn2 = Sgn(y) * (Pi - Atn(Abs(y / x)))
ElseIf y = 0 Then
Atn2 = 0
Else
Atn2 = Sgn(y) * Pi / 2
End If
End Function
我的问题来自于此 dPhi = log(tan(lat2 / 2 + Pi / 4)/ tan(lat1 / 2 + Pi / 4))
将错误作为负数记录。
有人可以指出我出错的地方,或建议替代方案吗?不幸的是,我必须使用经典的VBScript。
答案 0 :(得分:0)
我找到了解决方案。我的初始拉特和长数是小数。这些需要先转换为弧度。
vLat1 = Lat1 * pi/180
vLng1 = Long1 * pi/180
vLat2 = Lat2 * pi/180
vLng2 = Long2 * pi/180
所有后续计算涉及lats / longs都是用这些新变量完成的