How to measure the distance between two lat and long points

  • Thread starter A new kind of measurement
  • Start date
A

A new kind of measurement

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.
 
L

LeAnne

You haven't said whether you're using deg-min-sec or decimal degrees, or
which datum you're applying if using dec degrees, but I like this site
which performs the calculation for you:

http://jan.ucc.nau.edu/~cvm/latlongdist.html#formats

PS. You would probably get better results if you posted in a GIS-related
newsgroup. This newsgroup is for users of the relational database
program Microsoft Access.

LeAnne
 
G

Guest

I appreciate your reply. I have a table over over 600
entries and to do one at a time would take way too long.
I will check out that site though.

I am using access to link tables of zip codes to lat and
long coordinates, then to our company retail information.

My sample data is:

LAT: 33.8251
LONG: 88.6185

I want to use the formula in an Access query so all of the
lines can be calculted at the same time. I could then
group it and find the lowest value (or closest location).
 
L

LeAnne

Hi -

The formula is grim, IIRC, and involves some gnarly trig, which Access
unfortunately does not handle terribly well (although the Cos(), Sin(),
Tan(), and Atn() functions are available). If you look at the link I
posted upthread, there's a link from that page to a thread on Drexel
University's "Dr. Math" Forum where they discuss several permutations
of the formula. See if one of them will work for you.

hth,

LeAnne
 
G

Guest

Hi,

MS has the access neatcode.mdb with Lat/Long and great circle distances
already in vb code. Search for neatcode.exe on msdn.microsoft.com.

If you ever need a good source of lat long data for cities by the thousand,
the NOAA is pretty good and free (airport data). Or you could check out that
german astrology site that NASA web page links to.
Regards,
pdm
 
G

Guest

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
 
G

Guest

Try this...

UPDATE TABLE SET TABLE.DISTANCE =
(-ATN((((Sin([Start_Lat]*0.017453292519943299251994329))*(Sin([End_Lat]*0.017453292519943299251994329)))+((Cos([Start_Lat]*0.017453292519943299251994329))*(Cos([End_Lat]*0.017453292519943299251994329))*(Cos(Abs([Start_Long]*0.017453292519943299251994329-[End_Long]*0.017453292519943299251994329)))))/SQR(1-(((Sin([Start_Lat]*0.017453292519943299251994329))*(Sin([End_Lat]*0.017453292519943299251994329)))+((Cos([Start_Lat]*0.017453292519943299251994329))*(Cos([End_Lat]*0.017453292519943299251994329))*(Cos(Abs([Start_Long]*0.017453292519943299251994329-[End_Long]*0.017453292519943299251994329)))))*(((Sin([Start_Lat]*0.017453292519943299251994329))*(Sin([End_Lat]*0.017453292519943299251994329)))+((Cos([Start_Lat]*0.017453292519943299251994329))*(Cos([End_Lat]*0.017453292519943299251994329))*(Cos(Abs([Start_Long]*0.017453292519943299251994329-[End_Long]*0.017453292519943299251994329)))))))+3.141592653589793238/2)*3959.7113221489588;

CAM said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top