Этот вопрос закрыт для ответов, так как повторяет вопрос Как вывести расстояние между двумя координатами, зная долготу и широту обоих?
BonBonSlick
@BonBonSlick
Vanilla Web Architect

Подсчитать дистанцию между двумя координатами в метрах?

export const distanceBetweenCoords = (lat1, lon1, lat2, lon2, unit = 'K') => {
    if ((
            lat1 === lat2
        ) &&
        (
            lon1 === lon2
        )) {
        return 0;
    }
    const radlat1 = Math.PI * lat1 / 180;
    const radlat2 = Math.PI * lat2 / 180;
    const theta = lon1 - lon2;
    const radtheta = Math.PI * theta / 180;
    let dist = Math.sin(radlat1) *
               Math.sin(radlat2) +
               Math.cos(radlat1) *
               Math.cos(radlat2) *
               Math.cos(radtheta);
    if (dist > 1) {
        dist = 1;
    }
    dist = Math.acos(dist);
    dist = dist * 180 / Math.PI;
    dist = dist * 60 * 1.1515;
    //  'M' is statute miles (default)
    // 'K' is kilometers
    // 'N' is nautical miles
    if (unit === 'K') {
        dist = dist * 1.609344;
    }
    if (unit === 'N') {
        dist = dist * 0.8684;
    }
    return dist;
};


Я верно понимаю что надо убрать умножитель * 1.1515;?

Потому что мне крайне не понятны коси и синусы, для чег ои почему мы перемножаем на 180 и 60.

const R = 6371e3; // metres
    const φ1 = lat1 * Math.PI/180; // φ, λ in radians
    const φ2 = lat2 * Math.PI/180;
    const Δφ = (lat2-lat1) * Math.PI/180;
    const Δλ = (lon2-lon1) * Math.PI/180;

    const a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
              Math.cos(φ1) * Math.cos(φ2) *
              Math.sin(Δλ/2) * Math.sin(Δλ/2);
    let dist = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

    // const d = R * c; // in metres

    if (unit.toLowerCase() === 'm') {
        dist = R * c;
    }
    if (unit.toLowerCase() === 'k') {
        dist = R * c / 1000;
    }


Оба скрипта возвращают 0 всегда. Для реальных координат который онлайн калькуляторе выдают дистанцию.

Что не так?

Использую онлайн калькуляторы можно получить даже в СМ, так было бы даже лучше.
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы