2009-12-28 10 views
5

Después de una extensa investigación y un aprendizaje divertido sobre la API de mapeo de Google, estoy construyendo una aplicación de mapas de antenas digitales. En este punto, el siguiente paso en el plan del proyecto es construir una replicación del mapa de la memoria del mapa de Google que está ubicando las estaciones de televisión digital en función de la entrada de la dirección del usuario. Entonces, estoy usando este código matemático para formular el rumbo del centro del mapa de google y un punto lat/lng del conjunto de resultados de la base de datos.Mapeo de Matemáticas y Javascript

Mi pregunta es: ¿Cómo puedo completar los cálculos para mostrar la orientación en grados?

este código es la matemática que devuelve el siguiente conjunto de resultados matriz:

1.21 
1.10 
1.10 
1.10 
1.10 
2.62 
-0.29 
-1.17 
0.12 
3.04 

var y = Math.sin(longitude-center.lng()) * Math.cos(latitude); 
var x = Math.cos(center.lat())*Math.sin(latitude) - Math.sin(center.lat())*Math.cos(latitude)*Math.cos(longitude-center.lng()); 
var bearing = (Math.atan2(y, x)).toFixed(2); 

Parece que hay algo que falta en mis cálculos. La tabla db mantiene los valores de longitud como un número negativo para representar el cuadrante superior occidental del globo.

Cualquier sugerencia para completar mis cálculos ahorraría un millón de nuerons, ya he quemado un billón.

Tomando los grados a radianes sugerencia, he modificado el código javascript:

var radLat1 = center.lat() * Math.PI/180; 
var radLat2 = latitude * Math.PI/180; 
var radLng1 = center.lng() * Math.PI/180; 
var radLng2 = longitude * Math.PI/180; 

var y = Math.sin(radLng2- radLng1) * Math.cos(radLng2); 
var x = Math.cos(radLat1)*Math.sin(radLat2) -  Math.sin(radLat1)*Math.cos(radLat2)*Math.cos(radLng2-radLng1); 
var bearing = (Math.atan2(y, x)).toFixed(2); 

URL al sitio de pruebas del proyecto: click here

el div en la parte inferior de la página es un conjunto de resultados devueltos de 2 arrays, el primero sosteniendo la distancia y el segundo sosteniendo la medición del rumbo.

+0

gracias Justin – rjsteward

Respuesta

6

Google maps devuelve las coordenadas en grados. Por supuesto, las funciones trigonométricas esperan radianes. Por lo que usted desea convertir a radianes primera:

function deg_to_rad(degrees) { 
    return degrees * Math.PI/180; 
} 

Su matemáticas parece que está tratando de hacer lo the Haversine formula. Encontré una implementación de JavaScript here para que compruebe su código.

Puede verificar sus resultados en the FCC's DTV engineering maps.

+0

sí, he mirado en el sitio de la FCC. Gracias. – rjsteward

3

Con la ayuda de Seth, y usando mi cerebro de madrugada (sí, soy de mediana edad y soy más inteligente por la mañana).

El enlace al here, al que estaba estudiando, y a lo que se refirió Seth, es la clave. Usé el código del archivo js en la entrada del blog y cambié el código de un concepto oo javascript a un script que se ejecuta en línea.

esta es mi solución:

var lat1 = center.lat(); 
var lon1 = center.lng(); 
var lat2 = latitude; 
var lon2 = longitude; 

lat1 = lat1 * Math.PI/180; 
lat2 = lat2 * Math.PI/180; 
var dLon = (lon2-lon1) * Math.PI/180; 
var y = Math.sin(dLon) * Math.cos(lat2); 
var x = Math.cos(lat1)*Math.sin(lat2) - Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon); 

var bearing = Math.atan2(y, x) * 180/Math.PI; 
    if (bearing < 0){ 
      bearing = bearing + 360; 
    } 

    bearing = bearing.toFixed(0); 

stationDistance.push(distance.toFixed(1)); 
stationBearing.push(bearing); 

Me postulo la demo Google Map here.

Gracias por la ayuda y ahora puedo pasar al código lógico que recomendará el producto correcto para el cliente de mi cliente al this url.

ROCAS stackoverflow ....

Robert

+0

Trigonometría rocas! – Seth

+0

Gracias, esto me ayudó a obtener la orientación correcta. –

+0

http://martinhansen.no/2011/04/14/getting-the-bearingheading-betweet-2-coordinates/ –

Cuestiones relacionadas