使用地图进行大圆距离计算时遇到一些问题。
背景:http://airports.palzkill.de/search/
地图应该用作大圆距离搜索地图 - 您移动圆心标记或半径标记,圆圈变小或变大。出于调试目的,框标题字段显示以km为单位的计算距离。
只有当圆心接近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。:我知道由于投影的球形特性,整个事物必须在两极之间采取“反直觉”的行为。但这并没有真正解释当你将两个标记移动到赤道周围的日期线附近时会发生什么(0 / 179,0 / -179)。
答案 0 :(得分:3)
好的,在实现了更多代码之后,我实际上在方程式中发现了一个错误:使用lon我应该使用lat。
是的,我现在非常尴尬 - 同样恼火,花了5个小时查看条款,而不是早些时候发现这个明显的错误。