2012-01-26 2 views
2

Предположим, у меня есть 3 местоположения, а именно Kallang (A), Paya Lebar (B) и Bedok (C). Я пытаюсь сделать A-> B + B-> C, но расстояние всегда возвращает A-> C. Почему это так?Вычислить расстояние для нескольких мест google map

Kallang к Paya Lebar (AB) -> +2,5914199062350742 км

пайа Lebar к Bedok (BC) -> +4,4403012109180775 км

всего (ABC) -> 7,03 км

Kallang в Bedok (AC) -> 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

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

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

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

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

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

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

var indirect_distance = 
    google.maps.geometry.spherical.computeDistanceBetween(location1, location2) 
    + google.maps.geometry.spherical.computeDistanceBetween(location2, location3); 
+0

Благодаря вашей помощи было отлично .. Управляй, чтобы это сделать ... Большое спасибо: D – SupaFlybaba