1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
Attribute VB_Name = "Geodesic"
Option Explicit
' Declare the DLL functions
Private Declare PtrSafe Sub gdirect Lib "cgeodesic.dll" _
(ByVal lat1 As Double, ByVal lon1 As Double, _
ByVal azi1 As Double, ByVal s12 As Double, _
ByRef lat2 As Double, ByRef lon2 As Double, ByRef azi2 As Double)
Private Declare PtrSafe Sub ginverse Lib "cgeodesic.dll" _
(ByVal lat1 As Double, ByVal lon1 As Double, _
ByVal lat2 As Double, ByVal lon2 As Double, _
ByRef s12 As Double, ByRef azi1 As Double, ByRef azi2 As Double)
Private Declare PtrSafe Sub rdirect Lib "cgeodesic.dll" _
(ByVal lat1 As Double, ByVal lon1 As Double, _
ByVal azi12 As Double, ByVal s12 As Double, _
ByRef lat2 As Double, ByRef lon2 As Double)
Private Declare PtrSafe Sub rinverse Lib "cgeodesic.dll" _
(ByVal lat1 As Double, ByVal lon1 As Double, _
ByVal lat2 As Double, ByVal lon2 As Double, _
ByRef s12 As Double, ByRef azi12 As Double)
' Define the custom worksheet functions that call the DLL functions
Function geodesic_direct_lat2(lat1 As Double, lon1 As Double, _
azi1 As Double, s12 As Double) As Double
Attribute geodesic_direct_lat2.VB_Description = _
"Solves direct geodesic problem for lat2."
Dim lat2 As Double
Dim lon2 As Double
Dim azi2 As Double
Call gdirect(lat1, lon1, azi1, s12, lat2, lon2, azi2)
geodesic_direct_lat2 = lat2
End Function
Function geodesic_direct_lon2(lat1 As Double, lon1 As Double, _
azi1 As Double, s12 As Double) As Double
Attribute geodesic_direct_lon2.VB_Description = _
"Solves direct geodesic problem for lon2."
Dim lat2 As Double
Dim lon2 As Double
Dim azi2 As Double
Call gdirect(lat1, lon1, azi1, s12, lat2, lon2, azi2)
geodesic_direct_lon2 = lon2
End Function
Function geodesic_direct_azi2(lat1 As Double, lon1 As Double, _
azi1 As Double, s12 As Double) As Double
Attribute geodesic_direct_azi2.VB_Description = _
"Solves direct geodesic problem for azi2."
Dim lat2 As Double
Dim lon2 As Double
Dim azi2 As Double
Call gdirect(lat1, lon1, azi1, s12, lat2, lon2, azi2)
geodesic_direct_azi2 = azi2
End Function
Function geodesic_inverse_s12(lat1 As Double, lon1 As Double, _
lat2 As Double, lon2 As Double) As Double
Attribute geodesic_inverse_s12.VB_Description = _
"Solves inverse geodesic problem for s12."
Dim s12 As Double
Dim azi1 As Double
Dim azi2 As Double
Call ginverse(lat1, lon1, lat2, lon2, s12, azi1, azi2)
geodesic_inverse_s12 = s12
End Function
Function geodesic_inverse_azi1(lat1 As Double, lon1 As Double, _
lat2 As Double, lon2 As Double) As Double
Attribute geodesic_inverse_azi1.VB_Description = _
"Solves inverse geodesic problem for azi1."
Dim s12 As Double
Dim azi1 As Double
Dim azi2 As Double
Call ginverse(lat1, lon1, lat2, lon2, s12, azi1, azi2)
geodesic_inverse_azi1 = azi1
End Function
Function geodesic_inverse_azi2(lat1 As Double, lon1 As Double, _
lat2 As Double, lon2 As Double) As Double
Attribute geodesic_inverse_azi2.VB_Description = _
"Solves inverse geodesic problem for azi2."
Dim s12 As Double
Dim azi1 As Double
Dim azi2 As Double
Call ginverse(lat1, lon1, lat2, lon2, s12, azi1, azi2)
geodesic_inverse_azi2 = azi2
End Function
Function rhumb_direct_lat2(lat1 As Double, lon1 As Double, _
azi12 As Double, s12 As Double) As Double
Attribute rhumb_direct_lat2.VB_Description = _
"Solves direct rhumb problem for lat2."
Dim lat2 As Double
Dim lon2 As Double
Call rdirect(lat1, lon1, azi12, s12, lat2, lon2)
rhumb_direct_lat2 = lat2
End Function
Function rhumb_direct_lon2(lat1 As Double, lon1 As Double, _
azi12 As Double, s12 As Double) As Double
Attribute rhumb_direct_lon2.VB_Description = _
"Solves direct rhumb problem for lon2."
Dim lat2 As Double
Dim lon2 As Double
Call rdirect(lat1, lon1, azi12, s12, lat2, lon2)
rhumb_direct_lon2 = lon2
End Function
Function rhumb_inverse_s12(lat1 As Double, lon1 As Double, _
lat2 As Double, lon2 As Double) As Double
Attribute rhumb_inverse_s12.VB_Description = _
"Solves inverse rhumb problem for s12."
Dim s12 As Double
Dim azi12 As Double
Call rinverse(lat1, lon1, lat2, lon2, s12, azi12)
rhumb_inverse_s12 = s12
End Function
Function rhumb_inverse_azi12(lat1 As Double, lon1 As Double, _
lat2 As Double, lon2 As Double) As Double
Attribute rhumb_inverse_azi12.VB_Description = _
"Solves inverse rhumb problem for azi12."
Dim s12 As Double
Dim azi12 As Double
Call rinverse(lat1, lon1, lat2, lon2, s12, azi12)
rhumb_inverse_azi12 = azi12
End Function
|