Теорема Пифагора, предложенная здесь другими, работает не так хорошо.
Лучший простой ответ - приблизить Землю как сферу (на самом деле это слегка сплюснутая сфера, но это очень близко). Например, в Haskell вы можете использовать следующее, но математику можно записать почти во что угодно:
distRadians (lat1,lon1) (lat2,lon2) =
radius_of_earth *
acos (cos lat1 * cos lon1 * cos lat2 * cos lon2 +
cos lat1 * sin lon1 * cos lat2 * sin lon2 +
sin lat1 * sin lat2) where
radius_of_earth = 6378 -- kilometers
distDegrees a b = distRadians (coord2rad a) (coord2rad b) where
deg2rad d = d * pi / 180
coord2rad (lat,lon) = (deg2rad lat, deg2rad lon)
distRadians
требует указания углов в радианах.
distDegrees
- вспомогательная функция, которая может принимать широту и долготу в градусах.
См. этой серии сообщений для получения дополнительной информации о происхождении этой формулы.
Если вам действительно нужна дополнительная точность, обеспечиваемая предположением, что Земля эллипсоидальная, см. Этот FAQ: http://www.movable -type.co.uk / scripts / gis-faq-5.1.html