2014-06-22 2 views
0

다음 자바 스크립트 조각이 있습니다. 거리 함수 내부에서 로그 내용을 콘솔에 넣으려고 할 때마다 왜 계속 나노를 얻는 지 알 수 없습니다. 내가 lat1을 기록하더라도 NaN을 얻고 있습니다. 그러나 이것은 getDistance 함수 내에서만 발생합니다. 다른 곳에서는 모두 잘 작동합니다. 함수의 나머지는 NaN을 반환하기 때문에 분명히 작동하지 않습니다.위도와 자바 스크립트 사이의 거리 계산은 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

작품

라인을 교체하십시오 – adeneo

답변

2

당신은 함수 외부 선언 된 변수를 숨길 매개 변수를 사용하여 "getDistance()"기능을 선언하고있다. 매개 변수를 호출 할 때 전달하십시오 :

getDistance(lat, lon, lat2, long2); 

또는 그렇지 않으면 함수 선언에서 형식 매개 변수를 제거하십시오.

0

부동 소수점 숫자의 반올림으로 인해 1-a는 음수 값일 수 있습니다. //jsfiddle.net/yWP6n/** : - :

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

에> ** HTTP

var tan2 = 1-a; 
if (tan2 < 0) { 
    tan2 = 0; 
} 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(tan2)); 
나를 위해 잘
관련 문제