This is how I do it. Not very elegant, but I wrote it when I knew less and
I'm not going to fix it because it works. This calculates both distance and
bearing. Notice lat and long are in decimal degrees. Ours are collected in
degrees.minutes but there is another code that converts these as they are
entered. When I was testing whether I got the calcs right, I used this web
site to verify results. Hope this helps.
http://www.airways.com/java/coordcalc.html
CAM
Private Sub RECALCULATE_GotFocus()
If [End Long (decimal degrees)] > "" Then
[X] = (Sin([End Lat (decimal degrees)] * 1.74532925199433E-02) *
Sin([Start Lat (decimal degrees)] * 1.74532925199433E-02)) + (Cos([End Lat
(decimal degrees)] * 1.74532925199433E-02) * Cos([Start Lat (decimal
degrees)] * 1.74532925199433E-02) * (Cos(([End Long (decimal degrees)] *
1.74532925199433E-02) - ([Start Long (decimal degrees)] *
1.74532925199433E-02))))
End If
End Sub
Private Sub RECALCULATE_Click()
If [X] > " " Then
[Trawling distance (km)] = (Atn(-[X] / Sqr(-[X] * [X] + 1)) + 2 *
Atn(1)) * 6378
If Me![End Lat (decimal degrees)] < Me![Start Lat (decimal degrees)] And
Me![End Long (decimal degrees)] > Me![Start Long (decimal degrees)] Then
Me![Bearing (degrees)] = 180 + ((Atn((Sin((Me![End Long (decimal
degrees)] * 1.74532925199433E-02) - (Me![Start Long (decimal degrees)] *
1.74532925199433E-02)) * Cos(Me![End Lat (decimal degrees)] *
1.74532925199433E-02)) / (Sin(Me![End Lat (decimal degrees)] *
1.74532925199433E-02) * Cos(Me![Start Lat (decimal degrees)] *
1.74532925199433E-02) - (Sin(Me![Start Lat (decimal degrees)] *
1.74532925199433E-02) * Cos(Me![End Lat (decimal degrees)] *
1.74532925199433E-02) * Cos((Me![End Long (decimal degrees)] *
1.74532925199433E-02) - (Me![Start Long (decimal degrees)] *
1.74532925199433E-02)))))) * 180 / 3.14159265358979)
ElseIf Me![End Lat (decimal degrees)] < Me![Start Lat (decimal
degrees)] And Me![End Long (decimal degrees)] < Me![Start Long (decimal
degrees)] Then
Me![Bearing (degrees)] = 180 + ((Atn((Sin((Me![End Long (decimal
degrees)] * 1.74532925199433E-02) - (Me![Start Long (decimal degrees)] *
1.74532925199433E-02)) * Cos(Me![End Lat (decimal degrees)] *
1.74532925199433E-02)) / (Sin(Me![End Lat (decimal degrees)] *
1.74532925199433E-02) * Cos(Me![Start Lat (decimal degrees)] *
1.74532925199433E-02) - (Sin(Me![Start Lat (decimal degrees)] *
1.74532925199433E-02) * Cos(Me![End Lat (decimal degrees)] *
1.74532925199433E-02) * Cos((Me![End Long (decimal degrees)] *
1.74532925199433E-02) - (Me![Start Long (decimal degrees)] *
1.74532925199433E-02)))))) * 180 / 3.14159265358979)
ElseIf Me![End Lat (decimal degrees)] > Me![Start Lat (decimal
degrees)] And Me![End Long (decimal degrees)] < Me![Start Long (decimal
degrees)] Then
Me![Bearing (degrees)] = 360 + ((Atn((Sin((Me![End Long (decimal
degrees)] * 1.74532925199433E-02) - (Me![Start Long (decimal degrees)] *
1.74532925199433E-02)) * Cos(Me![End Lat (decimal degrees)] *
1.74532925199433E-02)) / (Sin(Me![End Lat (decimal degrees)] *
1.74532925199433E-02) * Cos(Me![Start Lat (decimal degrees)] *
1.74532925199433E-02) - (Sin(Me![Start Lat (decimal degrees)] *
1.74532925199433E-02) * Cos(Me![End Lat (decimal degrees)] *
1.74532925199433E-02) * Cos((Me![End Long (decimal degrees)] *
1.74532925199433E-02) - (Me![Start Long (decimal degrees)] *
1.74532925199433E-02)))))) * 180 / 3.14159265358979)
ElseIf Me![End Lat (decimal degrees)] > Me![Start Lat (decimal
degrees)] And Me![End Long (decimal degrees)] > Me![Start Long (decimal
degrees)] Then
Me![Bearing (degrees)] = ((Atn((Sin((Me![End Long (decimal degrees)]
* 1.74532925199433E-02) - (Me![Start Long (decimal degrees)] *
1.74532925199433E-02)) * Cos(Me![End Lat (decimal degrees)] *
1.74532925199433E-02)) / (Sin(Me![End Lat (decimal degrees)] *
1.74532925199433E-02) * Cos(Me![Start Lat (decimal degrees)] *
1.74532925199433E-02) - (Sin(Me![Start Lat (decimal degrees)] *
1.74532925199433E-02) * Cos(Me![End Lat (decimal degrees)] *
1.74532925199433E-02) * Cos((Me![End Long (decimal degrees)] *
1.74532925199433E-02) - (Me![Start Long (decimal degrees)] *
1.74532925199433E-02)))))) * 180 / 3.14159265358979)
ElseIf Me![End Lat (decimal degrees)] > Me![Start Lat (decimal
degrees)] And Me![End Long (decimal degrees)] = Me![Start Long (decimal
degrees)] Then
Me![Bearing (degrees)] = 0
ElseIf Me![End Lat (decimal degrees)] < Me![Start Lat (decimal
degrees)] And Me![End Long (decimal degrees)] = Me![Start Long (decimal
degrees)] Then
Me![Bearing (degrees)] = 180
ElseIf Me![End Lat (decimal degrees)] = Me![Start Lat (decimal
degrees)] And Me![End Long (decimal degrees)] > Me![Start Long (decimal
degrees)] Then
Me![Bearing (degrees)] = 90
ElseIf Me![End Lat (decimal degrees)] = Me![Start Lat (decimal
degrees)] And Me![End Long (decimal degrees)] < Me![Start Long (decimal
degrees)] Then
Me![Bearing (degrees)] = 270
End If
End If
End Sub
A new kind of measurement said:
As the subject says, I am trying to measure the distance
in miles between two lattitude and longitute points.
Anyone have a sample of the formula for this. I know it
involves some geometry, but can't seem to find it
anywhere. TIA.