0

だから私は次のJavaScriptを持っていますが、距離関数内でログをコンソールしようとするたびにNanを取得し続ける理由がわかりません。lat1 をログに記録しただけでも、NaN が返されます。しかし、これは getDistance 関数内でのみ発生し、他の場所ではすべて正常に機能しています。すべてが 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; 

})();

ここにフィドルがあります

4

2 に答える 2

2

関数の外部で宣言された変数を非表示にするパラメーターを使用して、「getDistance()」関数を宣言しています。呼び出すときにパラメーターを渡すか、次のようにします。

 getDistance(lat, lon, lat2, long2);

または、関数宣言の仮パラメーターを取り除きます。

于 2014-06-22T13:59:53.197 に答える
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));
于 2014-06-23T12:29:22.230 に答える