RDMLX code for determining distance between 2 lat / long
Posted: Thu Jun 14, 2012 11:33 pm
If you want to calculate the distance between 2 lat/long points in degrees, here is the code in RDMLX:
Mthroutine Name(GetDistance)
Define_Map For(*INPUT) Class(#STD_FLOAT) Name(#FromLat)
Define_Map For(*INPUT) Class(#STD_FLOAT) Name(#FromLng)
Define_Map For(*INPUT) Class(#STD_FLOAT) Name(#ToLat)
Define_Map For(*INPUT) Class(#STD_FLOAT) Name(#ToLng)
Define_Map For(*RESULT) Class(#std_float) Name(#Distance)
Define_Com Class(#STD_FLOAT) Name(#degreetorad)
Define Field(#dltlng) Type(*FLOAT)
* set value of degree to radian conversion
#degreetorad := 3.14159265358979323846264338327950288419716939937510 / 180
* convert our degress to radians
#FromLat := (90 - #FromLat) * #degreetorad
#ToLat := (90 - #ToLat) * #degreetorad
#FromLng := #FromLng * #degreetorad
#ToLng := #ToLng * #degreetorad
#dltlng := #ToLng - #FromLng
#Distance := (#FromLat.sine * #ToLat.Sine * #dltlng.Cosine) + (#FromLat.Cosine * #ToLat.Cosine)
* 3960 is for miles, use 6371 for kilometers
#Distance := #Distance.ArcCosine * 3960
#Distance *= 3960
Endroutine
Mthroutine Name(GetDistance)
Define_Map For(*INPUT) Class(#STD_FLOAT) Name(#FromLat)
Define_Map For(*INPUT) Class(#STD_FLOAT) Name(#FromLng)
Define_Map For(*INPUT) Class(#STD_FLOAT) Name(#ToLat)
Define_Map For(*INPUT) Class(#STD_FLOAT) Name(#ToLng)
Define_Map For(*RESULT) Class(#std_float) Name(#Distance)
Define_Com Class(#STD_FLOAT) Name(#degreetorad)
Define Field(#dltlng) Type(*FLOAT)
* set value of degree to radian conversion
#degreetorad := 3.14159265358979323846264338327950288419716939937510 / 180
* convert our degress to radians
#FromLat := (90 - #FromLat) * #degreetorad
#ToLat := (90 - #ToLat) * #degreetorad
#FromLng := #FromLng * #degreetorad
#ToLng := #ToLng * #degreetorad
#dltlng := #ToLng - #FromLng
#Distance := (#FromLat.sine * #ToLat.Sine * #dltlng.Cosine) + (#FromLat.Cosine * #ToLat.Cosine)
* 3960 is for miles, use 6371 for kilometers
#Distance := #Distance.ArcCosine * 3960
#Distance *= 3960
Endroutine