Как рассчитать расстояние между пятью маркерами? - PullRequest
1 голос
/ 25 января 2012

Как вы рассчитываете расстояние между пятью маркерами в Google maps V3? Я знаю, что должен использовать формулу Хаверсайна, которую я исследовал, и даже нашел здесь пост, где рассказывается о расчете расстояния между двумя маркерами. Что если я хочу посчитать это между пятью маркерами? Пытался несколько часов, но рассчитанный километр - это неправильно. Спасибо

Ниже приведены коды:

// compute distance between the two points
    var R = 6371; // KM
    var dLat = toRad(location5.lat()-location4.lat()-location3.lat()-location2.lat()-location1.lat());
    var dLon = toRad(location5.lng()-location4.lng()-location3.lng()-location2.lng()-location1.lng()); 

    var dLat1 = toRad(location1.lat());
    var dLat2 = toRad(location2.lat());
    var dLat3 = toRad(location3.lat());
    var dLat4 = toRad(location4.lat());
    var dLat5 = toRad(location5.lat());

    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.cos(dLat1) * Math.cos(dLat1) * 
            Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c;

    document.getElementById("distance_direct").innerHTML = "<br/><br/><br/>The distance between the five points (in a straight line) is: "+d +" Km.";
}

function toRad(deg) 
{
    return deg * Math.PI/180;
}

Полагаю, моя неправильная часть - строка, начинающаяся с var, формула. Пожалуйста, укажите мою ошибку, если я ошибаюсь, и, возможно, решение поможет?

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Функция computeLength () в Google Maps V3 должна дать вам то, что вам нужно, см. http://code.google.com/intl/el/apis/maps/documentation/javascript/geometry.html#Distance

0 голосов
/ 25 января 2012

Функция, которую вы используете для расстояния между двумя координатами. Вам нужно вычислить расстояние от A-> B, затем B-> C, а затем добавить эти расстояния в конце.

var distAB = calcDist(location1,location2);
var distBC = calcDist(location2,location3);
var distCD = calcDist(location3,location4);
var distDE = calcDist(location4,location5);

var distTotal = distAB + distBC + distCD + distDE;

function calcDist(locationA,locationB)
{
    var R = 6371; // KM
    var dLat = toRad(locationB.lat()) - toRad(locationA.lat());
    var dLng = toRad(locationB.lng()) - toRad(locationA.lng());
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(dLat1) * Math.cos(dLat1) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    return R * c;
}

function toRad(deg) 
{
    return deg * Math.PI/180;
}
...