2014-06-22 53 views
0

因此,我有以下一段JavaScript,並且我不知道爲什麼每當我嘗試在距離函數內部控制日誌內容時,都會收到Nan。即使我只記錄lat1,我也會得到NaN。但是這隻發生在getDistance函數內部,其他地方都可以正常工作。顯然,該函數的其餘部分不能正常工作,因爲一切都返回NaN。使用javascript計算lat long之間的距離只返回NaN

(function(){ 

    var lat = 52.387388 ; //example lat 
    var lon = 4.646219 ; //example lon 

    function initCoords() { 
     if (navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition(createLatLong); 
     } else { 
     showError("Your browser does not support Geolocation!"); 
     } 
    } 

    function createLatLong(position) { 
     var lat2 = position.coords.latitude; 
     var long2 = position.coords.longitude; 
     console.log(lat + "createLatLong"); 
     getDistance(); 
    } 

    function getDistance(lat, lon, lat2, long2) { 
     var R = 6371; 
     var dLat = (lat2-lat) * Math.PI/180; 
     var dLon = (long2-lon) * Math.PI/180; 
     var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.cos(lat * 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; 
     return d; }  

    window.onload = initCoords; 

})(); 

這裏的a fiddle

+1

工作得很好,對我來說 - > ** HTTP://jsfiddle.net/yWP6n/** – adeneo

回答

2

你宣佈與隱藏功能之外聲明的變量參數「getDistance的()」函數。或者在調用它時傳遞參數:

getDistance(lat, lon, lat2, long2); 

或者除去函數聲明中的形式參數。

0

由於浮點數四捨五入,1-a可能爲負值。

請更換行:

var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 

到:

var tan2 = 1-a; 
if (tan2 < 0) { 
    tan2 = 0; 
} 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(tan2)); 
相關問題