File: Geodesic.bas

package info (click to toggle)
geographiclib 2.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,572 kB
  • sloc: cpp: 27,765; sh: 5,463; makefile: 695; python: 12; ansic: 10
file content (132 lines) | stat: -rw-r--r-- 4,819 bytes parent folder | download | duplicates (3)
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