2016-08-03 10 views
-2

Ich habe den Azimut zwischen zwei Punkten in Breite und Länge berechnet ist diese Funktion richtig?Berechnen Sie den Azimut zwischen zwei Punkten mit der Breite und Länge sind bekannt mit VBA

Function azimut(lat1, lat2, lon1, lon2) 

azimut = WorksheetFunction.Degrees(WorksheetFunction.Atan2(
    Cos(Application.WorksheetFunction.Radians(lat1)) * 
    Sin(Application.WorksheetFunction.Radians(lat2)) - 
    Sin(Application.WorksheetFunction.Radians(lat1)) * 
    Cos(Application.WorksheetFunction.Radians(lat2)) * 
    Cos(Application.WorksheetFunction.Radians(lon2 - lon1)), 
    Sin(Application.WorksheetFunction.Radians(lon2 - lon1)) * 
    Cos(Application.WorksheetFunction.Radians(lat2)))) 

End Function 
+0

Nun sagen Sie uns, ob es korrekt ist oder nicht? Welche Werte hast du erwartet und was hast du genau bekommen :) Da du neu hier bist, würde ich empfehlen, [Diesen Link] (http://stackoverflow.com/tour) zu besuchen und dann deine Frage umzuformatieren. –

+0

Hast du Fragen zum Code? oder über die Gültigkeit der Formel, die Sie verwenden? –

+0

es geht um die Gültigkeit der Formel ... –

Antwort

2

Angenommen, Ihre Formel korrekt ist (da ich es mit dem Code interpretieren unten ohne Check), dann ist hier der Code:

Function Azimuth(lat1 As Single, lat2 As Single, lon1 As Single, lon2 As Single) As Single 

Dim X1 As Single, X2 As Single, Y As Single, dX As Single, dY As Single 

With Application.WorksheetFunction 
    X1 = .Radians(lat1) 
    X2 = .Radians(lat2) 
    Y = .Radians(lon2 - lon1) 
End With 

    dX = Math.Cos(X1) * Math.Sin(X2) - Math.Sin(X1) * Math.Cos(X2) * Math.Cos(Y) 
    dY = Math.Cos(X2) * Math.Sin(Y) 


With Application.WorksheetFunction 
    Azimuth = .Degrees(.Atan2(dX, dY)) 
End With 

End Function 

Nun, auch wenn die Formel falsch erweist zumindest sollte der obige Code Ihnen die Idee geben, damit anzufangen.