我在使用地图计算大圆距离时遇到了一些问题。
背景: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)时会发生什么。