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