2013-02-17 82 views
0

我有一個函數來計算座標我從谷歌地圖API的Javascript距離計算返回NaN

這裏得到兩套緯度和經度之間的距離是計算距離函數:

function getDistance(lat1, lon1, lat2, lon2) { 

    var lat1p = parseFloat(lat1); 
    var lon1p = parseFloat(lon1); 
    var lat2p = parseFloat(lat2); 
    var lon2p = parseFloat(lon2); 

    var R = 6371; // km (change this constant to get miles) 
    var dLat = (lat2p-lat1p) * Math.PI/180; 
    var dLon = (lon2p-lon1p) * Math.PI/180; 
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(lat1 * Math.PI/180) * Math.cos(lat2 * Math.PI/180) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c; 
    if (d>1) return Math.round(d)+"km"; 
    else if (d<=1) return Math.round(d*1000)+"m"; 

    return d; 
} 

我相信所有的座標被認爲是浮動類型我不是100%確定,但是當我有它打印或提醒距離它返回NaN ....有沒有辦法做到這一點。我試圖偏離Google Maps API來計算距離,因爲這會使一切變得更加困難,因爲我基本上必須重新開始。

+0

您應該通過檢查每個中間計算的結果來調試,以追蹤NaN來自哪裏。 – 2013-02-17 21:56:55

+0

我發現複雜的javascript計算幾乎總是要求您將parseFloat(x)中的中間值換行: var c = 2 * parseFloat(Math.atan2(...)); 你只是保持包裝值,直到它停止轉換爲字符串 – David 2013-02-17 22:00:10

+1

'parseFloat'可能會返回'NaN'。設置一個斷點並檢查變量。瞭解如何調試代碼:http://www.netmagazine.com/tutorials/javascript-debugging-beginners。 – 2013-02-17 22:00:35

回答

1

對不起,我修正了我是雙聲明變量以及我有一個。而不是一個,當我稱之爲距離函數。謝謝你們的建議,他們讓我弄明白了。