2010-10-28 10 views
5

Ich habe einige Probleme mit einer großen Kreisdistanzberechnung unter Verwendung einer Karte.Weird Great Circle Entfernungsberechnung

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

Die Karte soll als Großkreisentfernung Suche Karte arbeiten - Sie können die Kreise Mittelmarkierung oder den Radius Markierung bewegen, und der Kreis wird kleiner oder größer. Für Debug-Zwecke zeigt das Kästchen Titelfeld die berechnete Entfernung in km an.

Dies funktioniert nur, solange der Kreismittelpunkt nahe bei 0/0 liegt und der Radiusmarker nicht zu weit von ihm entfernt ist. Je mehr Sie einen der Marker zu "Extremen" bewegen, desto mehr geht die ganze Sache von einer Tangente ab und produziert nichts als Mist.

Dies ist der Code für die Berechnung des Updates verwendet, können Sie auch den gesamten Code in der JS-Datei js.js, Zeilen 146-184 finden:

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

Da das Ganze etwas korrekte Ausgabe nicht berechnen Ich nehme an, die Mathematik selbst ist nicht völlig falsch, ich denke, es gibt nur einige "Korrektur" Zeug fehlt? Leider bin ich bei der Trigonometrie absolut miserabel, also habe ich keine Ahnung, was hier falsch sein könnte, oder wo ich anfangen sollte, nach Ideen zu suchen, wie ich es beheben kann.

Marco

P. S .: Ich weiß, dass aufgrund der sphärischen Charakter der Projektion, die ganze Sache „kontra-intuitive“ um die Pole zu handeln. Aber das erklärt nicht wirklich, was passiert, wenn Sie beide Marker nahe der Datumslinie um den Äquator bewegen (0/179, 0/-179).

+0

Aus einer höheren Sicht, bemerkte ich, dass Ihre Kreisfunktion perfekt zu funktionieren scheint, wenn der Mittelpunktmarker in der Mitte der Karte ist. Es scheint, als ob das Problem mit der Art und Weise, wie Sie mit der Kante der Karte umgehen, nicht mit einem mathematischen Fehler per se zusammenhängt. –

+0

Ja Sam, mir ist das gleich aufgefallen: Das Problem wächst am schlimmsten je näher man an die Datumsgrenze/den 180. Meridian kommt. Da es am wenigsten um die 0/0-Konfluenz geht, gehe ich davon aus, dass die Mathematik selbst korrekt ist, aber ich denke, ich brauche einen Korrekturwert. –

Antwort

3

Okay, nach der Implementierung von etwas mehr Code, entdeckte ich tatsächlich einen Fehler in der Gleichung: Mit Lon, wo ich lat hätte verwenden sollen.

Und ja, ich bin jetzt sehr peinlich - und ebenso genervt, nachdem ich 5 Stunden damit verbracht habe, die Bedingungen zu betrachten und diesen offensichtlichen Fehler nicht früher zu finden.

+3

Wir waren alle dort. Vielen Dank für Ihre Nachricht. – GreenMatt