Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 哈弗森公式工作不正常_Javascript_Angularjs_Object_Coordinates_Haversine - Fatal编程技术网

Javascript 哈弗森公式工作不正常

Javascript 哈弗森公式工作不正常,javascript,angularjs,object,coordinates,haversine,Javascript,Angularjs,Object,Coordinates,Haversine,这是我的哈弗森公式代码,基于和的答案: 我用3个不同的位置测试了这一点,第一个位置说距离14790.7英里,而实际上距离44.1英里,每个位置的距离都不同。有些是少量的,另一些是非常大量的。我的数学有问题吗?如果没有,为什么这个代码不能正确工作? 这里是一个链接到一个与我的完整项目plunk:感谢在先进的任何帮助 实际计算得出了距离。问题是如何在函数中使用它 在函数myLat、myLon、locLat、locLon中传递4个参数,然后不使用它们。我假设您仍然在forEach循环中调用函数。试试这

这是我的哈弗森公式代码,基于和的答案:

我用3个不同的位置测试了这一点,第一个位置说距离14790.7英里,而实际上距离44.1英里,每个位置的距离都不同。有些是少量的,另一些是非常大量的。我的数学有问题吗?如果没有,为什么这个代码不能正确工作?
这里是一个链接到一个与我的完整项目plunk:感谢在先进的任何帮助

实际计算得出了距离。问题是如何在函数中使用它

在函数myLat、myLon、locLat、locLon中传递4个参数,然后不使用它们。我假设您仍然在forEach循环中调用函数。试试这个

外部forEach

内forEach

作用

$scope.getCoordDistance = function (myLat, myLon, locLat, locLon) {
       var R = 3959;
        var x1 = lat1 - lat2;
        var dLat = x1 * Math.PI / 180;
        var x2 = lon1 - lon2;
        var dLon = x2 * 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));
        d = R * c;
        return d;
    }   
var myLat = 41.894993;
var myLon = -88.459239;
var locLat = $scope.locLat;
var locLon = $scope.locLon;
getCoordDistance(myLat, myLon, locLat, locLon)
etc.
$scope.getCoordDistance = function (myLat, myLon, locLat, locLon) {
       var R = 3959;
        var x1 = lat1 - lat2;
        var dLat = x1 * Math.PI / 180;
        var x2 = lon1 - lon2;
        var dLon = x2 * 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));
        d = R * c;
        return d;
    }