lambdaway
::
haversine
6
|
list
|
login
|
load
|
|
_h1 haversine formula _p Following [[rosettacode|https://rosettacode.org/wiki/Haversine_formula]], implement a great-circle distance function, or use a library function, to show the great-circle distance between: _ul Nashville, TN, USA, which is: N 36°7.2', W 86°40.2' {b (36.12, -86.67)} _ul Los Angeles, CA, USA, which is: N 33°56.4', W 118°24.0' {b (33.94, -118.40) } {pre '{def haversine {def radians {lambda {:a} {* {/ {PI} 180} :a}}} {lambda {:lat1 :lon1 :lat2 :lon2} {let { {:diam {* 6372.8 2}} {:dLat {radians {- :lat2 :lat1}}} {:dLon {radians {- :lon2 :lon1}}} {:lat1 {radians :lat1}} {:lat2 {radians :lat2}} } {* :diam {asin {sqrt {+ {pow {sin {/ :dLat 2}} 2} {* {cos :lat1} {cos :lat2} {pow {sin {/ :dLon 2}} 2} }}}}}}}} -> {def haversine {def radians {lambda {:a} {* {/ {PI} 180} :a}}} {lambda {:lat1 :lon1 :lat2 :lon2} {let { {:diam {* 6372.8 2}} {:dLat {radians {- :lat2 :lat1}}} {:dLon {radians {- :lon2 :lon1}}} {:lat1 {radians :lat1}} {:lat2 {radians :lat2}} } {* :diam {asin {sqrt {+ {pow {sin {/ :dLat 2}} 2} {* {cos :lat1} {cos :lat2} {pow {sin {/ :dLon 2}} 2} }}}}}}}} '{haversine 36.12 -86.67 33.94 -118.40} -> {haversine 36.12 -86.67 33.94 -118.40} } _h2 translations {pre '{def deg2dec {lambda {:s :w} {let { {:s {if {or {W.equal? :s W} {W.equal? :s S}} then - else +}} {:dm {S.replace ° by space in {S.replace ' by in :w}}} } :s{S.get 0 :dm}.{round {* {/ 100 60} {S.get 1 :dm}}}}}} -> {def deg2dec {lambda {:s :w} {let { {:s {if {or {W.equal? :s W} {W.equal? :s S}} then - else +}} {:dm {S.replace ° by space in {S.replace ' by in :w}}} } :s{S.get 0 :dm}.{round {* {/ 100 60} {S.get 1 :dm}}}}}} '{haversine {deg2dec N 36°7.2'} {deg2dec W 86°40.2'} {deg2dec N 33°56.4'} {deg2dec W 118°24.0'}} -> {haversine {deg2dec N 36°7.2'} {deg2dec W 86°40.2'} {deg2dec N 33°56.4'} {deg2dec W 118°24.0'}} }
lambdaway v.20211111