gpt4 book ai didi

Javascript Haversine 错误

转载 作者:行者123 更新时间:2023-11-30 10:16:17 27 4
gpt4 key购买 nike

因此,我使用 Haversine 公式继续沿从 Google map 检索的路线查找位置,如下所示,使用英里数。

var R = 3959 //in miles;
var lat1 = result.routes[0].overview_path[index].k.toFixed(5);
var lat2 = locations[index2].lat;
var lon1 = result.routes[0].overview_path[index].A.toFixed(5);
var lon2 = locations[index2].lng;
var deltaLat = (lat2-lat1).toRad();
var deltaLon = (lon2-lon1).toRad();
var a = Math.sin(deltaLat/2)*Math.sin(deltaLat/2) + Math.cos(lat1) * Math.cos(lat2) *
Math.sin(deltaLon/2)*Math.sin(deltaLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R*c;

但是当它使用点(例如)36.64756、-97.34593(威奇托、堪萨斯州和达拉斯之间路径上的某处)和 39.933321、-91.409415(伊利诺伊州昆西的一个位置)时,我的距离小于 20英里。显然这是不正确的。我无法用其他值复制错误 - 我偶然发现了这一点。

这是 toRad 原型(prototype),顺便说一句 -

if(typeof(Number.prototype.toRad) === "undefined") {
Number.prototype.toRad = function(){
return this * Math.PI / 180;
};
}

我最初的猜测是某处存在浮点溢出,但我无法隔离它或使用 toFixed 缓解它。有人有什么想法吗?

最佳答案

我相信你的等式是错误的。这是您可以比较的 javascript 版本:http://www.movable-type.co.uk/scripts/latlong.html

区别在于您的术语 Math.cos(lat1) * Math.cos(lat2)。您需要先将 lat1lat2 转换为弧度。

关于Javascript Haversine 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23525930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com