21 lines
543 B
Common Lisp
21 lines
543 B
Common Lisp
(defparameter *earth-radius* 6372.8)
|
|
|
|
(defparameter *rad-conv* (/ pi 180))
|
|
|
|
(defun deg->rad (x)
|
|
(* x *rad-conv*))
|
|
|
|
(defun haversine (x)
|
|
(expt (sin (/ x 2)) 2))
|
|
|
|
(defun dist-rad (lat1 lng1 lat2 lng2)
|
|
(let* ((hlat (haversine (- lat2 lat1)))
|
|
(hlng (haversine (- lng2 lng1)))
|
|
(root (sqrt (+ hlat (* (cos lat1) (cos lat2) hlng)))))
|
|
(* 2 *earth-radius* (asin root))))
|
|
|
|
(defun dist-deg (lat1 lng1 lat2 lng2)
|
|
(dist-rad (deg->rad lat1)
|
|
(deg->rad lng1)
|
|
(deg->rad lat2)
|
|
(deg->rad lng2)))
|