2009-12-28 6 views
5

Dopo una lunga ricerca e un divertente apprendimento sulla mappa delle mappe di Google, sto costruendo un'applicazione per la mappa di un'antenna digitale. A questo punto, il prossimo passo nel piano del progetto è quello di costruire una replica mappa di memoria della mappa di google che sta localizzando le stazioni tv digitali in base all'input dall'indirizzo dell'utente. Quindi, sto usando questo codice matematico per formulare il rilevamento del centro della mappa di google e un punto lat/lng dal set di risultati del database.Mappatura matematica e Javascript

La mia domanda è: come posso completare i calcoli per mostrare il rilevamento in gradi?

questo codice è la matematica che restituisce il set di risultati seguente matrice:

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

Sembra che ci manca qualcosa nei miei calcoli. La tabella db mantiene i valori di longitudine come numero negativo per rappresentare il quadrante occidentale superiore del globo.

Qualsiasi suggerimento per completare la mia matematica salverebbe un milione di nueron, ho già bruciato un trilione.

Prendendo le gradi a radianti suggerimento, ho modificato il codice 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 sito del progetto di prova: click here

il div in fondo alla pagina è un insieme di risultati restituito da 2 matrici, la prima che tiene la distanza e la seconda tiene la misura del cuscinetto.

+0

grazie Justin – rjsteward

risposta

6

Google maps restituisce coordinate in gradi. Naturalmente, le funzioni trigonometriche si aspettano i radianti. Così si desidera convertire in radianti prima:

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

la matematica sembra che sta cercando di fare la the Haversine formula. Ho trovato un'implementazione javascript here per farti controllare il tuo codice.

È possibile verificare i risultati con the FCC's DTV engineering maps.

+0

sì, ho guardato il sito di FCC. Grazie. – rjsteward

3

Con l'aiuto di Seth, e usando il mio cervello mattutino (sì, sono di mezza età e sono più intelligente al mattino).

Il collegamento a here, che stavo studiando, e Seth a cui fa riferimento, è la chiave. Ho usato il codice dal file js sul post di blog e ho trasformato il codice da un concetto di oo javascript a uno script in esecuzione in linea.

questa è la mia soluzione:

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

sto facendo funzionare la demo google map here.

Grazie per l'aiuto e ora posso passare al codice logico che consiglierà il prodotto corretto per il cliente del mio cliente allo this url.

StackOverflow ROCCE ....

Robert

+0

Le rocce trigonometriche! – Seth

+0

Grazie a questo mi ha aiutato a ottenere il cuscinetto giusto. –

+0

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