I need to put the haversine formula in an sql or rpg function on the as400 to calc the distance between to zip codes. I do not have much experience with sql. can anyone give me some help?
Software/Hardware used:
ASKED:
October 31, 2008 10:01 PM
UPDATED:
November 6, 2008 5:42 PM
There was a similar discussion that may be relevant on devshed.com:
C program for Haversine formula
Cool but that doesn’t do the RPG bit.
C math in RPG
http://www.rpgiv.com/rpgnews/Feb99a/highmath.html
C library
http://publib.boulder.ibm.com/iseries/v5r2/ic2924/books/c4156070.pdf
Anyone got a sample RPGLE -C math
need to radians, sin, cos, atan, sqrt
to convert from degrees to radians I used:
degrees * pi/180 = radians
where pi = 3.1415926 (approx.) since I wasn’t sure if there was a c function that did the conversion.
also return 6371 * c returns kilometers
use 3956 for miles
Original request was Zip to distiance. Anyone know a table of zip to Lat/Long.
Computations are in km, you probably want them in miles
got the zip table file from the census…thanks. you guys are great!
OK guys, one more question.
C+ set :c = 2 * atan2(sqrt(:a), sqrt(1 – :a))
C+ set :c = 2 * asin(min(sqrt(:a)))
It doesn’t seem to calc correctly with stmt one. another version i’ve seen out there is stmt 2. but RPG doesn’t like the min part. any ideas on that?
The min function returns the smaller of two values, looks like the formula you found
should have been min(1,sqrt(a)) ??
heres a site discussing it
http://www.cs.nyu.edu/visual/home/proj/tiger/gisfaq.html
but the original source seems to be gone.
dlon = lon2 – lon1
dlat = lat2 – lat1
a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c = 2 * arcsin(min(1,sqrt(a)))
d = R * c
where R is the radius of the Earth.
if the JAVA program is not correct, what I posted will not be correct as I just converted what was there
copy the sin prototype and change “sin” to “asin” both times,
d asin pr 8f extproc('asin') d parm1 8f constthen
that was it! thanks so much!
c = 2 * arcsin(min(1,sqrt(a)))