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