用javascript计算lat和lat之间的距离只返回NaN

Calculating distance between lat long with javascript only returns NaN

本文关键字:lat 距离 返回 NaN 之间 javascript 计算      更新时间:2023-09-26

所以我有以下一块javascript,我不知道为什么我一直得到Nan每当我试图控制台日志的东西在距离函数内。即使log 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; 
})();

Here's fiddle

声明的"getDistance()"函数的参数隐藏了在函数外部声明的变量。或者在调用时传入参数:

 getDistance(lat, lon, lat2, long2);

,否则去掉函数声明中的形式形参。

由于浮点数的四舍五入,1-a可能是负值。

请替换line:

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));