Posted to tcl by jnc at Wed Jul 27 16:25:01 GMT 2011view raw

  1. et ::RADIAN_CONV 57.2957795131
  2.  
  3. proc distance { lat1 lon1 lat2 lon2 } {
  4. set lat1 [expr {$lat1 / $::RADIAN_CONV}]
  5. set lat2 [expr {$lat2 / $::RADIAN_CONV}]
  6. set dlon [expr {($lon2 - $lon1) / $::RADIAN_CONV}]
  7.  
  8. return [expr {acos(sin($lat1) * sin($lat2) + \
  9. cos($lat1) * cos($lat2) * cos($dlon)) * \
  10. 6371.0}]
  11. }
  12.  
  13. puts [time {distance 41.0 -81.0 42.0 -82.0} 100000]