Rhumb线标题计算(vbscript)

时间:2014-01-30 09:02:34

标签: vbscript geometry computational-geometry

我正在尝试使用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。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我的初始拉特和长数是小数。这些需要先转换为弧度。

vLat1 = Lat1 * pi/180 
vLng1 = Long1 * pi/180 
vLat2 = Lat2 * pi/180 
vLng2 = Long2 * pi/180 

所有后续计算涉及lats / longs都是用这些新变量完成的