Haversine公式无法正常工作

时间:2014-08-15 17:37:13

标签: javascript angularjs object coordinates haversine

这是我基于this的Haversine公式的代码和this question的答案:

$scope.getCoordDistance = function (myLat, myLon, locLat, locLon) {
        var lat2 = 41.894993;
        var lon2 = -88.459239;
        var lat1 = $scope.locLat;
        var lon1 = $scope.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;
    }

我用3个不同的位置对它进行了测试,他们完全没有了,第一个位置说它距离14790.7英里,实际上距离44.1英里,每个位置都有不同的数量。有些是少量的,有些是非常大的。这里的数学有问题吗?如果没有,为什么这个代码不能正常工作? 这是一个链接到我的完整项目的插件:http://plnkr.co/edit/nRQc7Ym0lsaK6jQwd626?p=preview
感谢先进的任何帮助!!!

1 个答案:

答案 0 :(得分:-1)

实际计算可以计算距离。问题是你如何在你的功能中使用它。

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

forEach

var myLat = 41.894993;
var myLon = -88.459239;

内部forEach

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