Проекты

new year Меню к новому годув преддверии нового 2010 года возникла идея порадовать себя и близких занятным сайтом

Смотреть

\n

argayash Сайт Аргаяшалетом 2009 был сделан сайт Аргаяшского сельского поселения

Смотреть

\n

грузчики Грузчики Санкт-Петербургапо заказу одного из моих одноклассников

Смотреть

\n

мировая экономика Мировая экономика на jQueryна интернет экзамен по мировой экономике. AJAX в действии

Смотреть

\n
  • Назад
  • Вперед

Вычисление расстояния по двум GPS координатам на JavaScript

24-12-2011 | Николай | Web разработка, Программирование

Метки: ,

Доброго времени суток, читатель!

В данной статье представлена реализация алгоритма вычисления расстояния между двумя точками, с известными 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)};

Удачи!

Попробуйте самостоятельно рассчитать расстояние между двумя точками в небольшом демонстрационном примере:

Демо