5

我在使用地图计算大圆距离时遇到了一些问题。

背景:http ://airports.palzkill.de/search/

该地图应该作为一个大圆圈距离搜索地图 - 你移动圆圈中心标记或半径标记,圆圈变得更小或更大。出于调试目的,框标题字段显示以公里为单位的计算距离。

这只有在圆心接近 0/0 并且半径标记离它不太远的情况下才能正常工作。您将任何一个标记移动到“极端”的次数越多,整个事情的切线就越多,并且只会产生废话。

这是用于计算更新的代码,您也可以在 JS 文件 js.js 的第 146 到 184 行中找到完整的代码:

function searchmapupdate()
{   
rad_lat_radiuspos = (circleradiusmarker.getPosition().lat()*Math.PI/180);
rad_lon_radiuspos = (circleradiusmarker.getPosition().lng()*Math.PI/180);
rad_lat_circlecenter = (circlecentermarker.getPosition().lat()*Math.PI/180);
rad_lon_circlecenter = (circlecentermarker.getPosition().lng()*Math.PI/180);

circleradiusvar = Math.acos(Math.sin(rad_lat_circlecenter)*Math.sin(rad_lat_radiuspos)+Math.cos(rad_lat_circlecenter)*Math.cos(rad_lon_radiuspos)*Math.cos(rad_lon_circlecenter-rad_lon_radiuspos))*6371.01*1000;

if (isNaN(circleradiusvar)==false) circle.setOptions({center:circlecentermarker.getPosition(), radius:circleradiusvar});

document.getElementById("mapsearchhead").innerHTML = Math.round(circleradiusvar/1000);
}

由于整个事情确实计算了一些正确的输出,我假设数学本身并不是完全错误的,我猜只是缺少一些“纠正”的东西?不幸的是,我在三角学方面非常糟糕,所以我不知道这里可能出了什么问题,甚至不知道从哪里开始寻找关于如何解决它的想法。

马可

PS:我知道由于投影的球形性质,整个事情必须在两极周围“反直觉”。但这并不能真正解释当您将两个标记移动到靠近赤道日期线(0/179、0/-179)时会发生什么。

4

1 回答 1

3

好吧,在实现了更多代码之后,我实际上在等式中发现了一个错误:在我应该使用 lat 的地方使用了 lon。

是的,我现在非常尴尬——同样恼火的是,我花了 5 个小时查看条款,而之前没有发现这个明显的错误。

于 2010-10-28T20:38:33.423 回答