Рассчитать расстояние для нескольких местоположений Google Map - PullRequest
2 голосов
/ 26 января 2012

Предположим, у меня есть 3 локации: Калланг (A), Пайя Лебар (B) и Бедок (C). Я пытаюсь сделать A-> B + B-> C, но расстояние всегда возвращает мне A-> C. Почему это так ??

Калланг до пая лебар (A-B) -> 2,5914199062350742 км

Пайя лебар в бедок (B-C) -> 4,4403012109180775 км

всего (A-B-C) -> 7,03 км

Калланг до бедок (A-C) -> 6,88 км

ниже мои коды:

var R = 6371; 
    var dLat = toRad(location3.lat()-location2.lat()) + toRad(location2.lat()-location1.lat());
    var dLon = toRad(location3.lng()-location2.lng()) + toRad(location2.lng()-location1.lng());

    var dLat1 = toRad(location1.lat());
    var dLat2 = toRad(location2.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;
}

Что-то не так с моим сложением и вычитанием выписки? Спасибо

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Вы можете просто использовать встроенный метод computeDistanceBetween из библиотеки геометрии

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

Да, проблема в том, чтобы добавить и вычесть одно и то же.Поскольку toRad() является просто умножением, оно ассоциативно соответствует + и - и, следовательно,

var dLat = toRad(location3.lat()-location2.lat())
         + toRad(location2.lat()-location1.lat());

точно так же, как

var dLat = toRad(location3.lat()-location1.lat());

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

Если вы используете JavaScript API Карт Google V3, вы можете просто загрузить Geometry Library и сделать это:

var indirect_distance = 
    google.maps.geometry.spherical.computeDistanceBetween(location1, location2)
  + google.maps.geometry.spherical.computeDistanceBetween(location2, location3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...