В настоящее время я использую указанную ниже функцию, и она работает некорректно. Согласно Google Maps, расстояние между этими координатами (от 59.3293371,13.4877472
до 59.3225525,13.4619422
) - 2.2
километры, а функция возвращает 1.6
километры. Как я могу заставить эту функцию возвращать правильное расстояние?
function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2-lat1); // deg2rad below
var dLon = deg2rad(lon2-lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
return d;
}
function deg2rad(deg) {
return deg * (Math.PI/180)
}
jsFiddle: http://jsfiddle.net/edgren/gAHJB/
javascript
coordinates
distance
Airikr
источник
источник
Ответы:
То, что вы используете, называется формулой гаверсинуса , которая вычисляет расстояние между двумя точками на сфере по прямой . В предоставленной вами ссылке Google Maps указано расстояние 2,2 км, потому что это не прямая линия.
Wolphram Alpha - отличный ресурс для выполнения географических расчетов, он также показывает расстояние 1,652 км между этими двумя точками .
Если вы ищете расстояние по прямой (как файлы вороны), ваша функция работает правильно. Если вам нужно расстояние на автомобиле (или расстояние на велосипеде, или расстояние до общественного транспорта, или расстояние пешком), вам придется использовать API картографирования ( Google или Bing являются наиболее популярными), чтобы получить соответствующий маршрут, который будет включать расстояние.
Между прочим, API Карт Google предоставляет пакетный метод для определения сферического расстояния в своем
google.maps.geometry.spherical
пространстве имен (ищитеcomputeDistanceBetween
). Это, вероятно, лучше, чем катать свой собственный (для начала, здесь используется более точное значение радиуса Земли).Для придирчивых из нас, когда я говорю «прямолинейное расстояние», я имею в виду «прямую линию на сфере», которая, конечно же, является изогнутой линией (то есть расстоянием по дуге большого круга).
источник
Я писал подобное уравнение раньше - тестировал и тоже получил 1,6 км.
Ваши карты Google показывали ПРОДОЛЬНОЕ расстояние.
Ваша функция вычисляет по прямой (расстояние по прямой).
источник
Решение Дерека отлично сработало для меня, и я просто преобразовал его на PHP, надеюсь, он кому-то поможет!
источник
Попробуй это. Он находится на VB.net, и вам нужно преобразовать его в Javascript. Эта функция принимает параметры в десятичных минутах.
Изменить преобразованную функцию в javascript
источник
const earthsMajorAccess = 6378137.0;
устранение необходимости в полезных комментариях (поскольку имя переменной подразумевает, что это такое)Рассчитать расстояние между двумя точками в javascript
Для получения дополнительной информации см. Ссылку на ссылку
источник
Исходный код с использованием формулы Хаверсина :
Образец кода находится под лицензией LGPLv3.
источник
Я написал функцию, чтобы найти расстояние между двумя координатами. Он вернет расстояние в метрах.
источник
Расстояние по дуге большого круга - От длины хорды
Вот элегантное решение, использующее шаблон разработки стратегии; Надеюсь, он достаточно читабельный.
TwoPointsDistanceCalculatorStrategy.js :
GreatCircleTwoPointsDistanceCalculatorStrategy.js:
конвертировано градусов к radians.js:
Это расстояние по Большому кругу - от длины хорды, задокументированной здесь .
источник
Посетите этот адрес. https://www.movable-type.co.uk/scripts/latlong.html Вы можете использовать этот код:
источник