我在使用地图计算大圆距离时遇到了一些问题。
背景: 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);
}
由于整个过程确实计算了一些正确的输出,我认为数学本身并不完全错误,我猜想只是缺少了一些“修正”性的东西? 不幸的是,我在三角学方面绝对很差,所以我不知道可能出了什么问题,甚至不知道从哪里开始寻找修复它的思路。
马可
P.S:我知道由于投影的球形性质,整个过程必须在极点周围表现出“反直觉”的行为。但这并不能解释当您将两个标记都靠近赤道的日期线附近移动时会发生什么。