2013-01-17 61 views
1

我使用以下兩種方式來計算使用緯度和經度的谷歌地圖中兩點之間的距離。計算兩點之間的距離顯示了錯誤的距離

  TYPE I: 
     function CalcDistanceBetween(lat1, lon1, lat2, lon2) { 
//Radius of the earth in: 1.609344 miles, 6371 km | var R = (6371/1.609344); 
var R = 6371; // Radius of earth in Miles 
var dLat = toRad(lat2-lat1); 
var dLon = toRad(lon2-lon1); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c; 
    alert("d==" + d); 
return d; 
} 
    alert(CalcDistanceBetween(13.125511084202,80.029651635576,12.9898593006481,80.2497744326417)); 
       function toRad(Value) { 
      /** Converts numeric degrees to radians */ 
     return Value * Math.PI/180; 
     } 

    TYPE II: 

      var p1 = new google.maps.LatLng(13.125511084202,80.029651635576); 
      var p2 = new google.maps.LatLng(12.9898593006481,80.2497744326417); 

      alert(calcDistance(p1, p2)); 

      //calculates distance between two points in km's 
         function calcDistance(p1, p2){ 
       return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2)/        
        1000).toFixed(2); 
       }  

以上兩種類型給出28公里作爲距離。 但是,當我檢查谷歌地圖具有相同的經度和緯度時,它返回36.8公里。在我的代碼&谷歌地圖 樣品查看圖所示..:enter image description here enter image description here

enter image description here

不要ü建議我要得到準確的結果?

回答

3

Google給出的距離來自建議的路線。它不是從A點到B點的直接路徑。您計算的距離是直接路徑,如果您直接從A飛到B,則只會出現這種情況。
如果您想獲得Google輸出的結果,請查看這裏:An elegant way to find shortest and fastest route in Google Maps API v3?

+1

他是對的,從A到B的距離是「Air Line」(直接不包括路線和東西)。 –

+0

是的,你是對的..但如果你給示例代碼..它對我有幫助 – Baskar

1

可能是我完全錯誤:)但它似乎你的方法計算這兩點之間的實際距離,當你與谷歌路線它是你採取的路線的距離。