Working on a project and need to know the distance in miles between two
locations.  The information that I have in the file to use to do this is the
longitude and latitude.  I have seen the code in PC jargon, but have not
been able to find anything about how to accomplish this in RPG.    Any
suggestions would be appreciated... I am cutting/pasting the calc to
accomplish this below...    as I look at this, I am lost! (or worse, lol)
surely, there is an easier way, but in searching the archives, I found
nothing on this... 



const pi = 3.14159265358979323846

Function distance(lat1, lon1, lat2, lon2, unit)
  Dim theta, dist
  theta = lon1 - lon2
  dist = sin(deg2rad(lat1)) * sin(deg2rad(lat2)) + cos(deg2rad(lat1)) *
cos(deg2rad(lat2)) * cos(deg2rad(theta))
  response.write "dist = " & dist & "<br>"
  dist = acos(dist)
  dist = rad2deg(dist)
  response.write "dist = " & dist & "<br>"
  distance = dist * 60 * 1.1515
  Select Case ucase(unit)
    Case "k"
      distance = distance * 1.609344
    Case "n"
      distance = distance * 0.8684
  End Select
End Function 


'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  this function get the arccos function using arctan function   :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function acos(rad)
  If abs(rad) <> 1 Then
    acos = pi/2 - atn(rad / sqr(1 - rad * rad))
  ElseIf rad = -1 Then
    acos = pi
  End If
End function


'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  this function converts decimal degrees to radians             :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function deg2rad(deg)
        deg2rad = cdbl(deg * pi / 180)
End Function

'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  this function converts radians to decimal degrees             :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function rad2deg(rad)
        rad2deg = cdbl(rad * 180 / pi)
End Function

msgbox(distance(32.9697, -96.80322, 29.46786, -98.53506, "m") & "
miles<br>")
msgbox(distance(32.9697, -96.80322, 29.46786, -98.53506, "k") & "
kilometers<br>")
msgbox(distance(32.9697, -96.80322, 29.46786, -98.53506, "n") & " nautical
miles<br>")

Karen Brasier
I.T. Department - Software Analyst
Standard Furniture Manufacturing Co.
Bay Minette, Alabama 36507
(251) 937-6741 ext 8848
There are 10 kinds of people in the world, those that understand binary and
those that do not.




This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2026 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.