RUSS_EMI
asked on
C to VB6 translation or translator
I have C code that I need to translate to VB6. Most I understand and have done. I have no experience with tables, constants. and little with arrays. Is there a translator available (freeware/ shareware) that would do the job. The program is about 75 pages long, I'd rather not do it by hand. Here is a portion I need specific help on.
const char* CLARKE_1866 = "CC";
const char* CLARKE_1880 = "CD";
const char* BESSEL_1841 = "BR";
const char* BESSEL_1841_NAMIBIA = "BN";
typedef struct Latitude_Band_Value
{
long letter; /* letter representing latitude band */
double min_northing; /* minimum northing for latitude band */
double north; /* upper latitude for latitude band */
double south; /* lower latitude for latitude band */
} Latitude_Band;
static const Latitude_Band Latitude_Band_Table[20] =
{{LETTER_C, 1100000.0, -72.0, -80.5},
{LETTER_D, 2000000.0, -64.0, -72.0},
{LETTER_E, 2800000.0, -56.0, -64.0},
{LETTER_F, 3700000.0, -48.0, -56.0},
{LETTER_G, 4600000.0, -40.0, -48.0},
{LETTER_H, 5500000.0, -32.0, -40.0},
{LETTER_J, 6400000.0, -24.0, -32.0},
{LETTER_K, 7300000.0, -16.0, -24.0},
{LETTER_L, 8200000.0, -8.0, -16.0},
{LETTER_M, 9100000.0, 0.0, -8.0},
{LETTER_N, 0.0, 8.0, 0.0},
{LETTER_P, 800000.0, 16.0, 8.0},
{LETTER_Q, 1700000.0, 24.0, 16.0},
{LETTER_R, 2600000.0, 32.0, 24.0},
{LETTER_S, 3500000.0, 40.0, 32.0},
{LETTER_T, 4400000.0, 48.0, 40.0},
{LETTER_U, 5300000.0, 56.0, 48.0},
{LETTER_V, 6200000.0, 64.0, 56.0},
{LETTER_W, 7000000.0, 72.0, 64.0},
{LETTER_X, 7900000.0, 84.5, 72.0}};
typedef struct UPS_Constant_Value
{
long letter; /* letter representing latitude band */
long ltr2_low_value; /* 2nd letter range - high number */
long ltr2_high_value; /* 2nd letter range - low number */
long ltr3_high_value; /* 3rd letter range - high number (UPS) */
double false_easting; /* False easting based on 2nd letter */
double false_northing; /* False northing based on 3rd letter */
} UPS_Constant;
static const UPS_Constant UPS_Constant_Table[4] =
{{LETTER_A, LETTER_J, LETTER_Z, LETTER_Z, 800000.0, 800000.0},
{LETTER_B, LETTER_A, LETTER_R, LETTER_Z, 2000000.0, 800000.0},
{LETTER_Y, LETTER_J, LETTER_Z, LETTER_P, 800000.0, 1300000.0},
{LETTER_Z, LETTER_A, LETTER_J, LETTER_P, 2000000.0, 1300000.0}};
Please point me to a translator, or if one isn't available (not commercial) let me know how to deal with static const tables.
Thanks,
Russ
const char* CLARKE_1866 = "CC";
const char* CLARKE_1880 = "CD";
const char* BESSEL_1841 = "BR";
const char* BESSEL_1841_NAMIBIA = "BN";
typedef struct Latitude_Band_Value
{
long letter; /* letter representing latitude band */
double min_northing; /* minimum northing for latitude band */
double north; /* upper latitude for latitude band */
double south; /* lower latitude for latitude band */
} Latitude_Band;
static const Latitude_Band Latitude_Band_Table[20] =
{{LETTER_C, 1100000.0, -72.0, -80.5},
{LETTER_D, 2000000.0, -64.0, -72.0},
{LETTER_E, 2800000.0, -56.0, -64.0},
{LETTER_F, 3700000.0, -48.0, -56.0},
{LETTER_G, 4600000.0, -40.0, -48.0},
{LETTER_H, 5500000.0, -32.0, -40.0},
{LETTER_J, 6400000.0, -24.0, -32.0},
{LETTER_K, 7300000.0, -16.0, -24.0},
{LETTER_L, 8200000.0, -8.0, -16.0},
{LETTER_M, 9100000.0, 0.0, -8.0},
{LETTER_N, 0.0, 8.0, 0.0},
{LETTER_P, 800000.0, 16.0, 8.0},
{LETTER_Q, 1700000.0, 24.0, 16.0},
{LETTER_R, 2600000.0, 32.0, 24.0},
{LETTER_S, 3500000.0, 40.0, 32.0},
{LETTER_T, 4400000.0, 48.0, 40.0},
{LETTER_U, 5300000.0, 56.0, 48.0},
{LETTER_V, 6200000.0, 64.0, 56.0},
{LETTER_W, 7000000.0, 72.0, 64.0},
{LETTER_X, 7900000.0, 84.5, 72.0}};
typedef struct UPS_Constant_Value
{
long letter; /* letter representing latitude band */
long ltr2_low_value; /* 2nd letter range - high number */
long ltr2_high_value; /* 2nd letter range - low number */
long ltr3_high_value; /* 3rd letter range - high number (UPS) */
double false_easting; /* False easting based on 2nd letter */
double false_northing; /* False northing based on 3rd letter */
} UPS_Constant;
static const UPS_Constant UPS_Constant_Table[4] =
{{LETTER_A, LETTER_J, LETTER_Z, LETTER_Z, 800000.0, 800000.0},
{LETTER_B, LETTER_A, LETTER_R, LETTER_Z, 2000000.0, 800000.0},
{LETTER_Y, LETTER_J, LETTER_Z, LETTER_P, 800000.0, 1300000.0},
{LETTER_Z, LETTER_A, LETTER_J, LETTER_P, 2000000.0, 1300000.0}};
Please point me to a translator, or if one isn't available (not commercial) let me know how to deal with static const tables.
Thanks,
Russ
ASKER
Thank you. Is there anything to help do the many pages of code, or am I stuck doing it by hand.
What I am trying to do is have a routine that will convert from MGRS to Lat/Long degree decimal using VB.
Russ
What I am trying to do is have a routine that will convert from MGRS to Lat/Long degree decimal using VB.
Russ
Which precisson do you need? Also, do you really need all these ancient ellipsoids like Bessel/Clark etc? Probably WGS-84 is enough?
ASKER
It varies 3 - 5. WGS-84 is all in need, just scraped it for sample, not going to be included.
The end user will input 38SMB123456 -> 38SMB1234567890.
Got any routines already, to save time?
Thanks,
Russ
The end user will input 38SMB123456 -> 38SMB1234567890.
Got any routines already, to save time?
Thanks,
Russ
PS
Here is my app to prepare tests for cadets (I'm a lecturer of Navigation at Marine University) to convert WGS-84 coordinates into special ellipsoid (chart based on) coordinates. Each ellipsoid determined with dX, dY, dZ (center difference between ellipsoid and WGS-84), a (major semiaxis) and dF (latitude factor). All this data available from numerous literature (Brown's nautical almanac, for example).
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 2730
ClientLeft = 60
ClientTop = 345
ClientWidth = 3945
LinkTopic = "Form1"
ScaleHeight = 2730
ScaleWidth = 3945
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 375
Left = 2040
TabIndex = 8
Top = 1920
Width = 1695
End
Begin VB.Frame Frame1
Caption = "Frame1"
Height = 915
Left = 180
TabIndex = 5
Top = 1680
Width = 3615
Begin VB.TextBox Text3
Height = 315
Left = 1080
TabIndex = 6
Text = "Text3"
Top = 300
Width = 495
End
Begin VB.Label Label2
Caption = "Label2"
Height = 315
Left = 120
TabIndex = 7
Top = 300
Width = 915
End
End
Begin VB.CommandButton Command2
Caption = "Command2"
Height = 315
Left = 180
TabIndex = 4
Top = 1260
Width = 1635
End
Begin VB.TextBox Text2
Alignment = 1 'Right Justify
Height = 285
Left = 180
TabIndex = 2
Text = "Text2"
Top = 540
Width = 1635
End
Begin VB.TextBox Text1
Alignment = 1 'Right Justify
Height = 315
Left = 180
TabIndex = 1
Text = "Text1"
Top = 120
Width = 1635
End
Begin VB.ComboBox Combo1
Height = 315
Left = 180
Style = 2 'Dropdown List
TabIndex = 0
Top = 900
Width = 1635
End
Begin VB.Label Label1
BorderStyle = 1 'Fixed Single
Caption = "Label1"
Height = 1035
Left = 1920
TabIndex = 3
Top = 120
Width = 1815
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Enum Ell_Name
Jakarta
HongKong
Tokio
NAD
NZGD
Luson
End Enum
Private Type Position
Lat As Double
Lon As Double
End Type
Private Type Ell_Data
dx As Double
dy As Double
dz As Double
a As Double
dF As Double
End Type
Dim sEllName As Variant
Dim ed As Ell_Data
Dim pos As Position
Private Sub Command1_Click()
Dim DeltaF As Double, DeltaL As Double
Dim nEll As Integer
Dim i As Long
Dim sVar As String, sResult As String, sVarPrefix As String, sVarSuffix As String
sResult = Space(35) & "Coordinates conversion" & vbCrLf & vbCrLf
sResult = sResult & String(82, "-") & vbCrLf
sResult = sResult & "№ | TESTS || ANSWERS "
sResult = sResult & vbCrLf & " |" & String(79, "-") & vbCrLf
sResult = sResult & "в.|Geodet.syst.| F84 | L84 || dF | dL | Fk | Lk "
sResult = sResult & vbCrLf & String(82, "=") & vbCrLf
sVarPrefix = " Coordinates conversion " & vbCrLf & "Test No: "
sVarSuffix = String(42, "-") & vbCrLf & "dF' = ? dL' = ? Fk = ? Lk = ?" & vbCrLf & String(42, "-")
For i = 1 To Val(Text3)
nEll = GetRandom(0, 5)
ed = GetElData(nEll)
pos.Lat = (GetRandom(0, 180 * 60 * 1000&) - 90 * 60 * 1000&) / 60000
pos.Lon = (GetRandom(0, 360 * 60 * 1000&) - 180 * 60 * 1000&) / 60000
DeltaF = dF(pos.Lat, pos.Lon, ed)
DeltaL = dL(pos.Lat, pos.Lon, ed)
sResult = sResult & Format(i, "00") & "|" & Format(sEllName(nEll), "@@@@@@@@@@@@!") & "|"
sResult = sResult & FormatCoord(pos.Lat) & "|" & FormatCoord(pos.Lon, True) & "||"
sResult = sResult & Format(DeltaF, "+0.000000;-0.000000") & "|" & Format(DeltaL, "+0.000000;-0.000000") & "|"
sResult = sResult & FormatCoord(pos.Lat + DeltaF / 60) & "|" & FormatCoord(pos.Lon + DeltaL / 60, True) & vbCrLf
sVar = sVar & sVarPrefix & i & vbCrLf & "Geodetical chart system: " & sEllName(nEll) & vbCrLf
sVar = sVar & "F84 = " & FormatCoord(pos.Lat) & "; L84 = " & FormatCoord(pos.Lon, True)
sVar = sVar & vbCrLf & sVarSuffix & vbCrLf
Next i
Open "Result.txt" For Output As #1
Print #1, sResult
Close #1
Open "Var.txt" For Output As #1
Print #1, sVar
Close #1
End Sub
Private Function dF(phi As Double, lambda As Double, ed As Ell_Data) As Double
dF = (3438 / 6378137) * (ed.dx * Sind(phi) * Cosd(lambda) + ed.dy * Sind(phi) * Sind(lambda) - ed.dz * Cosd(phi) - ed.a * ed.dF * Sind(2 * phi) * 0.0001)
End Function
Private Function dL(phi As Double, lambda As Double, ed As Ell_Data) As Double
dL = (3438 / 6378137 / Cosd(phi)) * (ed.dx * Sind(lambda) - ed.dy * Cosd(lambda))
End Function
Public Function Rad(ByVal X As Double) As Double
Rad = X * Atn(1) / 45#
End Function
Public Function Deg(ByVal X As Double) As Double
Deg = X * 45# / Atn(1)
End Function
'Helpfull functions to compute sin, cos, tan
'with argument in degrees
Public Function Sind(ByVal X As Double) As Double
Sind = Sin(Rad(X))
End Function
Public Function Cosd(ByVal X As Double) As Double
Cosd = Cos(Rad(X))
End Function
Private Function GetElData(ByVal en As Ell_Name) As Ell_Data
Select Case en
Case Jakarta
GetElData.dx = 377
GetElData.dy = -681
GetElData.dz = 50
GetElData.a = 6377397.155
GetElData.dF = -0.100374
Case HongKong
GetElData.dx = 156
GetElData.dy = 271
GetElData.dz = 189
GetElData.a = 6378388
GetElData.dF = 0.141922702
Case Tokio
GetElData.dx = 148
GetElData.dy = -507
GetElData.dz = -685
GetElData.a = 6377397.155
GetElData.dF = -0.10037483
Case NAD
GetElData.dx = 8
GetElData.dy = -160
GetElData.dz = -176
GetElData.a = 6378206.4
GetElData.dF = 0.37264639
Case NZGD
GetElData.dx = -84
GetElData.dy = 22
GetElData.dz = -209
GetElData.a = 6378388
GetElData.dF = 0.14192702
Case Luson
GetElData.dx = 133
GetElData.dy = 77
GetElData.dz = 51
GetElData.a = 6378206.4
GetElData.dF = 0.37264639
End Select
End Function
Private Function GetRandom(min As Long, max As Long) As Long
GetRandom = Int((max - min + 1) * Rnd + min)
End Function
Public Function FormatCoord(ByVal X As Double, Optional bLon As Boolean = False) As String
Dim sSgn As String, sFmt As String
sFmt = String(Abs(bLon) + 2, "000")
If X < 0 Then
If bLon Then sSgn = "W" Else sSgn = "S"
Else
If bLon Then sSgn = "E" Else sSgn = "N"
End If
X = Abs(X)
FormatCoord = Format(Int(X), sFmt) & "-" & Format((X - Int(X)) * 60, "00.000") & sSgn
End Function
Private Sub Command2_Click()
Dim sTemp As String, iSign As Integer, iSep As Integer
sTemp = Text1.Text
iSign = IIf(Right(sTemp, 1) = "N", 1, -1)
iSep = InStr(1, sTemp, "-")
pos.Lat = Left(sTemp, iSep - 1) + Mid(sTemp, iSep + 1, Len(sTemp) - iSep - 1) / 60
pos.Lat = pos.Lat * iSign
sTemp = Text2.Text
iSign = IIf(Right(sTemp, 1) = "E", 1, -1)
iSep = InStr(1, sTemp, "-")
pos.Lon = Left(sTemp, iSep - 1) + Mid(sTemp, iSep + 1, Len(sTemp) - iSep - 1) / 60
pos.Lon = pos.Lon * iSign
Dim DeltaF As Double, DeltaL As Double
Dim sLabel As String
DeltaF = dF(pos.Lat, pos.Lon, GetElData(Combo1.ListIndex ))
DeltaL = dL(pos.Lat, pos.Lon, GetElData(Combo1.ListIndex ))
sLabel = "dF = " & Format(DeltaF, "+0.000000;-0.000000") & vbCrLf & "dL = " & Format(DeltaL, "+0.000000;-0.000000") & vbCrLf
sLabel = sLabel & vbCrLf & "F = " & FormatCoord(pos.Lat + DeltaF / 60) & vbCrLf & "L = " & FormatCoord(pos.Lon + DeltaL / 60, True)
Label1 = sLabel
End Sub
Private Sub Form_Load()
sEllName = Array("Jakarta", "H_Kong 1963", "Tokyo", "NAD 1927", "NZGD 1949", "Louson")
Text1 = "00-00.000N"
Text2 = "000-00.000E"
For i = 0 To 5
Combo1.AddItem sEllName(i)
Next i
Combo1.ListIndex = 0
Frame1.Caption = "Random"
Label2.Caption = "Num tests:"
Command1.Caption = "Calculate"
Command2.Caption = "Calculate"
Text3 = 25
End Sub
Regards
Ark
Here is my app to prepare tests for cadets (I'm a lecturer of Navigation at Marine University) to convert WGS-84 coordinates into special ellipsoid (chart based on) coordinates. Each ellipsoid determined with dX, dY, dZ (center difference between ellipsoid and WGS-84), a (major semiaxis) and dF (latitude factor). All this data available from numerous literature (Brown's nautical almanac, for example).
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 2730
ClientLeft = 60
ClientTop = 345
ClientWidth = 3945
LinkTopic = "Form1"
ScaleHeight = 2730
ScaleWidth = 3945
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 375
Left = 2040
TabIndex = 8
Top = 1920
Width = 1695
End
Begin VB.Frame Frame1
Caption = "Frame1"
Height = 915
Left = 180
TabIndex = 5
Top = 1680
Width = 3615
Begin VB.TextBox Text3
Height = 315
Left = 1080
TabIndex = 6
Text = "Text3"
Top = 300
Width = 495
End
Begin VB.Label Label2
Caption = "Label2"
Height = 315
Left = 120
TabIndex = 7
Top = 300
Width = 915
End
End
Begin VB.CommandButton Command2
Caption = "Command2"
Height = 315
Left = 180
TabIndex = 4
Top = 1260
Width = 1635
End
Begin VB.TextBox Text2
Alignment = 1 'Right Justify
Height = 285
Left = 180
TabIndex = 2
Text = "Text2"
Top = 540
Width = 1635
End
Begin VB.TextBox Text1
Alignment = 1 'Right Justify
Height = 315
Left = 180
TabIndex = 1
Text = "Text1"
Top = 120
Width = 1635
End
Begin VB.ComboBox Combo1
Height = 315
Left = 180
Style = 2 'Dropdown List
TabIndex = 0
Top = 900
Width = 1635
End
Begin VB.Label Label1
BorderStyle = 1 'Fixed Single
Caption = "Label1"
Height = 1035
Left = 1920
TabIndex = 3
Top = 120
Width = 1815
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Enum Ell_Name
Jakarta
HongKong
Tokio
NAD
NZGD
Luson
End Enum
Private Type Position
Lat As Double
Lon As Double
End Type
Private Type Ell_Data
dx As Double
dy As Double
dz As Double
a As Double
dF As Double
End Type
Dim sEllName As Variant
Dim ed As Ell_Data
Dim pos As Position
Private Sub Command1_Click()
Dim DeltaF As Double, DeltaL As Double
Dim nEll As Integer
Dim i As Long
Dim sVar As String, sResult As String, sVarPrefix As String, sVarSuffix As String
sResult = Space(35) & "Coordinates conversion" & vbCrLf & vbCrLf
sResult = sResult & String(82, "-") & vbCrLf
sResult = sResult & "№ | TESTS || ANSWERS "
sResult = sResult & vbCrLf & " |" & String(79, "-") & vbCrLf
sResult = sResult & "в.|Geodet.syst.| F84 | L84 || dF | dL | Fk | Lk "
sResult = sResult & vbCrLf & String(82, "=") & vbCrLf
sVarPrefix = " Coordinates conversion " & vbCrLf & "Test No: "
sVarSuffix = String(42, "-") & vbCrLf & "dF' = ? dL' = ? Fk = ? Lk = ?" & vbCrLf & String(42, "-")
For i = 1 To Val(Text3)
nEll = GetRandom(0, 5)
ed = GetElData(nEll)
pos.Lat = (GetRandom(0, 180 * 60 * 1000&) - 90 * 60 * 1000&) / 60000
pos.Lon = (GetRandom(0, 360 * 60 * 1000&) - 180 * 60 * 1000&) / 60000
DeltaF = dF(pos.Lat, pos.Lon, ed)
DeltaL = dL(pos.Lat, pos.Lon, ed)
sResult = sResult & Format(i, "00") & "|" & Format(sEllName(nEll), "@@@@@@@@@@@@!") & "|"
sResult = sResult & FormatCoord(pos.Lat) & "|" & FormatCoord(pos.Lon, True) & "||"
sResult = sResult & Format(DeltaF, "+0.000000;-0.000000") & "|" & Format(DeltaL, "+0.000000;-0.000000") & "|"
sResult = sResult & FormatCoord(pos.Lat + DeltaF / 60) & "|" & FormatCoord(pos.Lon + DeltaL / 60, True) & vbCrLf
sVar = sVar & sVarPrefix & i & vbCrLf & "Geodetical chart system: " & sEllName(nEll) & vbCrLf
sVar = sVar & "F84 = " & FormatCoord(pos.Lat) & "; L84 = " & FormatCoord(pos.Lon, True)
sVar = sVar & vbCrLf & sVarSuffix & vbCrLf
Next i
Open "Result.txt" For Output As #1
Print #1, sResult
Close #1
Open "Var.txt" For Output As #1
Print #1, sVar
Close #1
End Sub
Private Function dF(phi As Double, lambda As Double, ed As Ell_Data) As Double
dF = (3438 / 6378137) * (ed.dx * Sind(phi) * Cosd(lambda) + ed.dy * Sind(phi) * Sind(lambda) - ed.dz * Cosd(phi) - ed.a * ed.dF * Sind(2 * phi) * 0.0001)
End Function
Private Function dL(phi As Double, lambda As Double, ed As Ell_Data) As Double
dL = (3438 / 6378137 / Cosd(phi)) * (ed.dx * Sind(lambda) - ed.dy * Cosd(lambda))
End Function
Public Function Rad(ByVal X As Double) As Double
Rad = X * Atn(1) / 45#
End Function
Public Function Deg(ByVal X As Double) As Double
Deg = X * 45# / Atn(1)
End Function
'Helpfull functions to compute sin, cos, tan
'with argument in degrees
Public Function Sind(ByVal X As Double) As Double
Sind = Sin(Rad(X))
End Function
Public Function Cosd(ByVal X As Double) As Double
Cosd = Cos(Rad(X))
End Function
Private Function GetElData(ByVal en As Ell_Name) As Ell_Data
Select Case en
Case Jakarta
GetElData.dx = 377
GetElData.dy = -681
GetElData.dz = 50
GetElData.a = 6377397.155
GetElData.dF = -0.100374
Case HongKong
GetElData.dx = 156
GetElData.dy = 271
GetElData.dz = 189
GetElData.a = 6378388
GetElData.dF = 0.141922702
Case Tokio
GetElData.dx = 148
GetElData.dy = -507
GetElData.dz = -685
GetElData.a = 6377397.155
GetElData.dF = -0.10037483
Case NAD
GetElData.dx = 8
GetElData.dy = -160
GetElData.dz = -176
GetElData.a = 6378206.4
GetElData.dF = 0.37264639
Case NZGD
GetElData.dx = -84
GetElData.dy = 22
GetElData.dz = -209
GetElData.a = 6378388
GetElData.dF = 0.14192702
Case Luson
GetElData.dx = 133
GetElData.dy = 77
GetElData.dz = 51
GetElData.a = 6378206.4
GetElData.dF = 0.37264639
End Select
End Function
Private Function GetRandom(min As Long, max As Long) As Long
GetRandom = Int((max - min + 1) * Rnd + min)
End Function
Public Function FormatCoord(ByVal X As Double, Optional bLon As Boolean = False) As String
Dim sSgn As String, sFmt As String
sFmt = String(Abs(bLon) + 2, "000")
If X < 0 Then
If bLon Then sSgn = "W" Else sSgn = "S"
Else
If bLon Then sSgn = "E" Else sSgn = "N"
End If
X = Abs(X)
FormatCoord = Format(Int(X), sFmt) & "-" & Format((X - Int(X)) * 60, "00.000") & sSgn
End Function
Private Sub Command2_Click()
Dim sTemp As String, iSign As Integer, iSep As Integer
sTemp = Text1.Text
iSign = IIf(Right(sTemp, 1) = "N", 1, -1)
iSep = InStr(1, sTemp, "-")
pos.Lat = Left(sTemp, iSep - 1) + Mid(sTemp, iSep + 1, Len(sTemp) - iSep - 1) / 60
pos.Lat = pos.Lat * iSign
sTemp = Text2.Text
iSign = IIf(Right(sTemp, 1) = "E", 1, -1)
iSep = InStr(1, sTemp, "-")
pos.Lon = Left(sTemp, iSep - 1) + Mid(sTemp, iSep + 1, Len(sTemp) - iSep - 1) / 60
pos.Lon = pos.Lon * iSign
Dim DeltaF As Double, DeltaL As Double
Dim sLabel As String
DeltaF = dF(pos.Lat, pos.Lon, GetElData(Combo1.ListIndex
DeltaL = dL(pos.Lat, pos.Lon, GetElData(Combo1.ListIndex
sLabel = "dF = " & Format(DeltaF, "+0.000000;-0.000000") & vbCrLf & "dL = " & Format(DeltaL, "+0.000000;-0.000000") & vbCrLf
sLabel = sLabel & vbCrLf & "F = " & FormatCoord(pos.Lat + DeltaF / 60) & vbCrLf & "L = " & FormatCoord(pos.Lon + DeltaL / 60, True)
Label1 = sLabel
End Sub
Private Sub Form_Load()
sEllName = Array("Jakarta", "H_Kong 1963", "Tokyo", "NAD 1927", "NZGD 1949", "Louson")
Text1 = "00-00.000N"
Text2 = "000-00.000E"
For i = 0 To 5
Combo1.AddItem sEllName(i)
Next i
Combo1.ListIndex = 0
Frame1.Caption = "Random"
Label2.Caption = "Num tests:"
Command1.Caption = "Calculate"
Command2.Caption = "Calculate"
Text3 = 25
End Sub
Regards
Ark
Oops, sorry, posted at same time with you, seems you don't need this sample. Unfortunatelly, I didn't work with MGRS yet. I'll try to look what I can do with it.
ASKER
Thank you. This will be used where I'm stationed 38SMB 45956 86195.
Russ
Russ
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I tried to send all source code, but it was too much. I'll trim it down and send it later today.
Russ
Russ
const char* CLARKE_1866 = "CC"
'VB code
Const CLARKE_1866 = "CC"
//C++ code
typedef struct Latitude_Band_Value
{
long letter; /* letter representing latitude band */
double min_northing; /* minimum northing for latitude band */
double north; /* upper latitude for latitude band */
double south; /* lower latitude for latitude band */
} Latitude_Band;
'VB code
Type Latitude_Band
letter As Long
min_northing As Double
north As Double
south As Double
End Type
//C++ code
static const Latitude_Band Latitude_Band_Table[20] =
{{LETTER_C, 1100000.0, -72.0, -80.5},
{LETTER_D, 2000000.0, -64.0, -72.0},
//etc.
'VB Code
'C++ allow set values at same time when you dim variable, VB - not.
Public Latitude_Band_Table(20) As Latitude_Band
'Somwhere in code:
With Latitude_Band_Table(0)
letter = LETTER_C 'I think LETTER_C is a constant defined somewhere in C++ code
min_northing = 1100000.0
north = -72.0
south = -80.5
End With
With Latitude_Band_Table(1)
letter = LETTER_D 'I think LETTER_D is a constant defined somewhere in C++ code
min_northing = 2000000.0
north = -64.0
south = -72.0
End With
'Same with UPS constants.
'AFAIK, there aren't any C/VB translators.
'If you need more help with reference-ellipsoid calculations, let me know