function distance(lat1, lon1, lat2, lon2) {
var dLat = ((lat2-lat1)*Math.PI)/180;
var dLon = ((lon2-lon1)*Math.PI)/180;
var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos((lat1*Math.PI)/180) * Math.cos((lat2*Math.PI)/180) * Math.sin(dLon/2) * Math.sin(dLon/2);
var b = 2*Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var l = (6371*b).toFixed(2); // R Земли 6371 км
return l;
}
function calculateDistance2(lat1, lon1, lat2, lon2) {
if (lat1 > lat2) var ac = lat1 - lat2; else var ac = lat2 - lat1;
if (lon1 > lon2) var bc = lon1 - lon2; else var bc = lon2 - lon1;
var ab = Math.sqrt((ac*ac)+(bc*bc));
var l = (ab*100).toFixed(2);
return l;
}
Я работаю на диспетчерскую службу грузовых автоперевозок и такси, как по городам, так и по междугородним. У меня стояла задача вычисления расстояния своими средствами без сервисов Яндекса и Гугла. Алгоритм с радиусом Земли тяжеловесный (много таких операций будет тормозить сервер), поэтому я хотел его обойти и использовать формулу по-проще. Первое, что вспомнил: можно на плоской поверхности вычислить расстояние между двумя точками по длине гипотенузы (перевод из треугольника). И это работает - но только на расстоянии до 1 километра. А дальше, чем большее расстояние, тем большая ошибка от реальных показаний одометров автомобилей. Я работал и над таксометрами. Пришлось отказаться и использовать тяжеловесный но точный алгоритм.
Все расчеты и коды программ я выложил на этой странице с демонстрацией их работы. Каждый человек, имеющий желание познать истину и хоть какие-то познания в математике из школьного курса, может это все сам проверить.
Поинтересуйтесь хотя бы что такое гипотенуза.