29 lines
787 B
Text
29 lines
787 B
Text
class EarthPoint(lat, lon) {
|
|
|
|
const earth_radius = 6371 # mean earth radius
|
|
const radian_ratio = Num.pi/180
|
|
|
|
# accessors for radians
|
|
method latR { self.lat * radian_ratio }
|
|
method lonR { self.lon * radian_ratio }
|
|
|
|
method haversine_dist(EarthPoint p) {
|
|
var arc = EarthPoint(
|
|
self.lat - p.lat,
|
|
self.lon - p.lon,
|
|
)
|
|
|
|
var a = Math.sum(
|
|
(arc.latR / 2).sin**2,
|
|
(arc.lonR / 2).sin**2 *
|
|
self.latR.cos * p.latR.cos
|
|
)
|
|
|
|
earth_radius * a.sqrt.asin * 2
|
|
}
|
|
}
|
|
|
|
var BNA = EarthPoint.new(lat: 36.12, lon: -86.67)
|
|
var LAX = EarthPoint.new(lat: 33.94, lon: -118.4)
|
|
|
|
say BNA.haversine_dist(LAX) #=> 2886.444442837983299747157823945746716...
|