这是我基于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
感谢先进的任何帮助!!!
答案 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;
}