2010-10-28 95 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