2010-10-28 14 views
5

Mam pewne problemy z obliczaniem wielkich okręgów za pomocą mapy.Dziwne wielkie koło Obliczanie odległości

Kontekst: http://airports.palzkill.de/search/

Mapa ma pracować jako ortodromy wyszukiwanie Mapa - przesunąć znacznik środkowego koła lub znacznik promienia, a koło staje się mniejsza lub większa. W celu debugowania pole tytułu pola pokazuje obliczoną odległość w km.

Działa to tylko wtedy, gdy środek okręgu jest bliski 0/0, a znacznik promienia nie jest zbytnio od niego oddalony. Im bardziej przesuniesz jeden ze znaczników do "skrajności", tym bardziej odejdziesz od tej stycznej i nic nie wyniknie z bzdur.

Jest to kod używany do obliczania aktualizacji, można również znaleźć cały kod w js.js pliku JS, linie 146 do 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); 
} 

Ponieważ cała sprawa ma obliczyć jakiś poprawny wynik Zakładam, że sama matematyka nie jest całkowicie zła, myślę, że brakuje tylko niektórych "korekcyjnych" rzeczy? Niestety jestem absolutnie kiepski w trygonometrii, więc nie mam pojęcia, co może być nie tak tutaj, ani nawet gdzie zacząć szukać pomysłów, jak to naprawić.

Marco

P.S .: Wiem, że ze względu na charakter sferycznej projekcji, wszystko musi działać „intuicyjne” wokół biegunów. Ale to naprawdę nie wyjaśnia, co się dzieje, gdy przesuniesz oba znaczniki w pobliżu linii czasu wokół równika (0/179, 0/-179).

+0

Z widoku wysokiego poziomu zauważyłem, że funkcja koła wydaje się działać idealnie, gdy znacznik środka znajduje się pośrodku mapy. Wygląda na to, że problemem jest sposób, w jaki radzisz sobie z krawędzią mapy, a nie błąd matematyczny jako taki. –

+0

Tak Sam, zauważyłem to samo: Problem faktycznie staje się najgorszy, im bliżej poruszasz się do linii czasu/180-tego południka. Ponieważ jest to najmniej wokół zbiegania się 0/0, zakładam, że sama matematyka jest rzeczywiście poprawna, ale myślę, że potrzebuję jakiejś wartości korekcyjnej. –

Odpowiedz

3

OK, po wprowadzeniu trochę więcej kodu, faktycznie odkryłem błąd w równaniu: Używanie lon gdzie powinienem był używać lat.

I tak, jestem teraz bardzo zawstydzony - i równie zirytowany, że spędziłem 5 godzin na zapoznaniu się z warunkami i nie znajdowaniu tego oczywistego błędu wcześniej.

+3

Wszyscy byliśmy tam. Dziękujemy za opublikowanie poprawki. – GreenMatt

Powiązane problemy