2012-01-26 21 views
2

私はKallang(A)、Paya Lebar(B)、Bedok(C)の3つの場所があるとします。私はA-> B + B-> Cをやろうとしますが、距離は常にA-> Cを返します。なぜこれはそうですか? > 4.4403012109180775キロ複数の場所の距離を計算するGoogleマップ

合計(ABC) - - ベドックする> 7.03キロ

カラン(

カランのPaya lebarに(AB) - (BC)をベドックする> 2.5914199062350742キロ

パヤのlebar 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()); 

とまったく同じです。

あなたはGoogle Maps JavaScript APIのV3を使用している場合は、あなただけのGeometry Libraryをロードし、これを行うことができます:

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

からcomputeDistanceBetween方法で構築されたおかげであなたの助けを使用することができます優れていた..それをやって管理...多くのありがとう:D – SupaFlybaba

関連する問題