奇怪的大圆距离计算

Mar*_* P. 5 javascript geocoding trigonometry great-circle

使用地图进行大圆距离计算时遇到一些问题.

背景: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);
}
Run Code Online (Sandbox Code Playgroud)

由于整个事情确实计算了一些正确的输出,我认为数学本身并不是完全错误的,我想只有一些"修正"的东西丢失了?不幸的是,我对三角学非常糟糕,所以我不知道这里可能有什么问题,甚至在哪里开始寻找有关如何修复它的想法.

马尔科

PS:我知道由于投影的球形特性,整个事物必须在两极之间采取"反直觉"的行为.但这并不能解释当你将两个标记移近赤道周围的日期线时会发生什么(0/179,0/-179).

Mar*_* P. 3

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

是的,我现在非常尴尬 - 并且同样恼火,我花了 5 个小时查看条款,却没有更早发现这个明显的错误。

  • 我们都去过那里。感谢您发布您的修复程序。 (3认同)