2010-10-28 13 views
5

Tengo algunos problemas con un gran círculo de cálculo de distancia usando un mapa.Extraño Cálculo de la distancia del Gran Círculo

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

El mapa se supone que funciona como un gran mapa de búsqueda círculo de distancia - se mueve el marcador central círculos o el marcador radio, y el círculo se hace más pequeño o más grande. Para fines de depuración, el campo de título de cuadros muestra la distancia calculada en km.

Esto solo funciona bien siempre que el centro del círculo esté cerca de 0/0, y el marcador de radio no esté demasiado lejos de él. Cuanto más mueva cualquiera de los marcadores a "extremos", más desaparece algo de tangente y produce nada más que basura.

Este es el código utilizado para el cálculo de las actualizaciones, también se puede encontrar el código completo en los js.js archivo JS, las líneas 146 a 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); 
} 

Dado que todo el asunto no calcular alguna salida correcta Supongo que las matemáticas en sí no son totalmente incorrectas, ¿creo que faltan algunas cosas "correccionales"? Desafortunadamente, soy absolutamente pésimo en trigonometría, por lo que no tengo ni idea de qué podría estar mal aquí, ni siquiera dónde comenzar a buscar ideas sobre cómo solucionarlo.

Marco

P.S .: Yo sé que debido a la naturaleza esférica de la proyección, todo el asunto tiene que actuar "contra-intuitivo" alrededor de los polos. Pero eso no explica realmente lo que sucede cuando mueves ambos marcadores cerca de la línea de fecha alrededor del ecuador (0/179, 0/-179).

+0

Desde una vista de alto nivel, noté que la función del círculo parece funcionar perfectamente cuando el marcador central está en el centro del mapa. Parece que el problema está en la forma en que se está tratando con el borde del mapa, no en un error matemático per se. –

+0

Sí, Sam, me di cuenta de lo mismo: el problema en realidad se vuelve peor cuanto más te acercas a la línea de fecha/180º meridiano. Como es mínimo alrededor de la confluencia 0/0, supongo que las matemáticas en sí son correctas, pero creo que necesito algún valor correccional. –

Respuesta

3

Bien, después de implementar un poco más de código, descubrí un error en la ecuación: usando Lon donde debería haber usado lat.

Y sí, estoy muy avergonzado ahora - e igualmente molesto, después de haber pasado 5 horas mirando los términos y no encontrar este error obvio antes.

+3

Todos hemos estado allí. Gracias por publicar tu corrección. – GreenMatt

Cuestiones relacionadas