奇怪的大圆距离计算方法

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);
}

由于整个过程确实计算了一些正确的输出,我认为数学本身并不完全错误,我猜想只是缺少了一些“修正”性的东西? 不幸的是,我在三角学方面绝对很差,所以我不知道可能出了什么问题,甚至不知道从哪里开始寻找修复它的思路。

马可

P.S:我知道由于投影的球形性质,整个过程必须在极点周围表现出“反直觉”的行为。但这并不能解释当您将两个标记都靠近赤道的日期线附近移动时会发生什么。


从高层次来看,我注意到你的圆形函数在地图中心标记位于中心时似乎完美运作。问题似乎出现在你处理地图边缘的方式上,而不是数学错误本身。 - Sam Dufel
是的,Sam,我也注意到了同样的问题:实际上,问题在你越靠近日期线/180度经线时变得更加严重。由于它在0/0交汇处最小,我认为数学本身确实是正确的,但我想我需要一些校正值。 - Marco P.
1个回答

3

好的,在实施更多代码后,我实际上发现方程式中存在一个错误:在应该使用纬度时我使用了经度。

是的,我现在感到非常尴尬 - 同样也很恼火,因为花费了5个小时查看这些术语,而之前没有找到这个明显的错误。


3
我们都曾经历过那个时候。谢谢你发布你的修复方法。 - GreenMatt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接