2010-10-28 96 views
5

我有一些问题与使用地图大圆距离计算。奇怪的大圆距离计算

语境: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

从高层次看,我注意到当中心标记位于地图中心时,您的圆圈函数似乎可以很好地工作。看起来问题在于你处理地图边缘的方式,而不是本身的数学错误。 – 2010-10-28 17:37:45

+0

是的,山姆,我注意到了:当你移动到日期线/ 180子午线时,问题实际上变得越糟。由于它至少在0/0汇合点附近,我认为数学本身确实是正确的,但我想我需要一些修正值。 – 2010-10-28 18:56:21

回答

3

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

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

+3

我们都去过那里。感谢您发布您的修补程序。 – GreenMatt 2010-10-28 21:47:53