|
There's a pretty inexpensive package to do a lot of this. http://worksright.com They even supply source. We have it. However I never checked to see if it is 100% source. After all, they do have an expiration date. Rob Berendt -- Group Dekko Services, LLC Dept 01.073 PO Box 2000 Dock 108 6928N 400E Kendallville, IN 46755 http://www.dekko.com "Karen Brasier" <karen.brasier@xxxxxxxxx> Sent by: rpg400-l-bounces@xxxxxxxxxxxx 01/12/2005 02:23 PM Please respond to RPG programming on the AS400 / iSeries <rpg400-l@xxxxxxxxxxxx> To "'RPG programming on the AS400 / iSeries'" <rpg400-l@xxxxxxxxxxxx> cc Subject longitude / latitude distance calculations 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 is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/rpg400-l or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/rpg400-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 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.