Вычисление расстояния по двум GPS координатам на JavaScript
24-12-2011 | Николай | Web разработка, Программирование
Метки: GPS, JavaScript
Доброго времени суток, читатель!
В данной статье представлена реализация алгоритма вычисления расстояния между двумя точками, с известными GPS координатами. В силу профессиональной деятельности, возникла необходимость написать «сабжевый» скрипт. Первоначальное «гугление» выводило меня только на геометрическую формулу, которая в силу некоторых обстоятельств (Земля-то круглая!) не подходила по определению. Через несколько минут поиска нашлась ссылка на страницу, где было представлено описание необходимого алгоритма. Прочитав статью до конца, и не найдя реализации алгоритма на JS, я решил переписать представленный алгоритм.
функция на JavaScript:
function latlng2distance(lat1, long1, lat2, long2) {
//радиус Земли
var R = 6372795;
//перевод коордитат в радианы
lat1 *= Math.PI / 180;
lat2 *= Math.PI / 180;
long1 *= Math.PI / 180;
long2 *= Math.PI / 180;
//вычисление косинусов и синусов широт и разницы долгот
var cl1 = Math.cos(lat1);
var cl2 = Math.cos(lat2);
var sl1 = Math.sin(lat1);
var sl2 = Math.sin(lat2);
var delta = long2 - long1;
var cdelta = Math.cos(delta);
var sdelta = Math.sin(delta);
//вычисления длины большого круга
var y = Math.sqrt(Math.pow(cl2 * sdelta, 2) + Math.pow(cl1 * sl2 - sl1 * cl2 * cdelta, 2));
var x = sl1 * sl2 + cl1 * cl2 * cdelta;
var ad = Math.atan2(y, x);
var dist = ad * R; //расстояние между двумя координатами в метрах
return dist
}
сжатая версия (291 байт):
function latlng2distance(b,d,c,a){var b=b*(Math.PI/180),c=c*(Math.PI/180),d=d*(Math.PI/180),a=a*(Math.PI/180),f=Math.cos(b),e=Math.cos(c),b=Math.sin(b),c=Math.sin(c),a=a-d,d=Math.cos(a),a=Math.sin(a),a=Math.sqrt(Math.pow(e*a,2)+Math.pow(f*c-b*e*d,2));return 6372795*Math.atan2(a,b*c+f*e*d)};
Удачи!
Попробуйте самостоятельно рассчитать расстояние между двумя точками в небольшом демонстрационном примере:



