| Haversine formula: | R = earth’s radius (mean radius = 6,371km) Δlat = lat2− lat1 Δlong = long2− long1 a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2) c = 2.atan2(√a, √(1−a)) d = R.c (Note that angles need to be in radians to pass to trig functions). |
| JavaScript: | var R = 6371; // km var dLat = (lat2-lat1).toRad(); var dLon = (lon2-lon1).toRad(); var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * Math.sin(dLon/2) * Math.sin(dLon/2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); var d = R * c; |
RPGLE sample code (distance in miles)
h option(*srcstmt:*nodebugio)
h BndDir('QC2LE') DftActGrp(*NO)
*
* Prototypes
d ACosine Pr 8f ExtProc('acos')
d double 8f Value
d Cosine Pr 8f ExtProc('cos')
d double 8f Value
d Sine Pr 8f ExtProc('sin')
d double 8f Value
d $home_lat s 11p 6
d $home_lng s 11p 6
d $away_lat s 11p 6
d $away_lng s 11p 6
d $distance s 8p 2
d home_lat s 11p 6
d home_lng s 11p 6
d away_lat s 11p 6
d away_lng s 11p 6
*
*----- Main Routine
*
c *entry plist
c parm $home_lat
c parm $home_lng
c parm $away_lat
c parm $away_lng
c parm $distance
c eval(h) home_lat = $home_lat/57.2958
c eval(h) home_lng = $home_lng/57.2958
c eval(h) away_lat = $away_lat/57.2958
c eval(h) away_lng = $away_lng/57.2958
c eval(h) $distance =
c ACosine((Sine(home_lat) * Sine(away_lat)) +
c (Cosine(away_lng - home_lng) *
c Cosine(home_lat) *
c Cosine(away_lat))) * 3963.10
c eval *inlr = *on
c return
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.