|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2006
Messaggi: 53
|
[JAVA]Calcolare distanza coordinate geografiche
Salve a tutti, sto cercando di sviluppare una funzione che mi calcoli la distanza tra due punti avendo le loro coordinate gps; ho trovato l'algoritmo qui (quello più complicato, con maggiore precisione) http://en.wikipedia.org/wiki/Great-circle_distance
e ho scritto la seguente classe per il calcolo: Codice:
public double distanza(double lat1, double longit1, double lat2, double longit2) { double distance = 0; double dist_long = longit2 - longit1; double dist_lat = lat2 - lat1; double pezzo1 = Math.cos(lat2)*Math.sin(dist_long); double pezzo11 = pezzo1*pezzo1; double pezzo2 = Math.cos(lat1)*Math.sin(lat2)-Math.sin(lat1)*Math.cos(lat2)*Math.cos(dist_long); double pezzo22 = pezzo2*pezzo2; double pezzo3 = Math.sin(lat1)*Math.sin(lat2)+Math.cos(lat1)*Math.cos(lat2)*Math.cos(dist_long); double pezzo4 = Math.atan((Math.sqrt(pezzo11+pezzo22))/pezzo3); distance = pezzo4*6372; return distance; } public static void main(String [] a){ GPS1 gps = new GPS1(); System.out.println(gps.distanza(46.06716, 11.12331, 46.07033, 11.12462)); System.out.println(gps.distanza(46.06833, 11.12388, 46.06848, 11.12776)); } Cosa c'è che non va? PS: poi questa funzione la dovrò trasferire in una midlet su cellulare ma per farlo non c'è problema, basta solo far funzionare questa.. ciao ciao grazie Ultima modifica di erkk84 : 23-07-2008 alle 21:48. |
![]() |
![]() |
![]() |
#2 | |
Member
Iscritto dal: May 2004
Messaggi: 84
|
Credo che il problema dipenda da questo (preso dall'esempio nella pagina di wikipedia):
Quote:
|
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Dec 2006
Messaggi: 53
|
ah ecco..sinceramente l'ho guardato ma non preso in considerazione perchè non capisco cosa vuol dire...cioè, non capisco i simboli: cos'è Sign?cos'è x (da una parte sembra una moltiplicazione, dall'altra una variabile)?Date le coordinate nel formato come da codice, qualcuno può aitarmi ad introdurle nel giusto formato?
Grazie mille intanto ciao ciao |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: May 2004
Messaggi: 84
|
l'esempio di wikipedia considera coordinate del tipo gradi minuti secondi e dice di convertirli prima in gradi decimali e poi in radianti.
Poichè tu utilizzi già coordinate in gradi decimali, devi soltanto convertirli in radianti, cioè moltiplicare per Math.PI e dividere per 180. Codice:
public static double radianti(double gradi_dec) { return gradi_dec * Math.PI / 180; } |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Dec 2006
Messaggi: 53
|
Quindi tanto per capirci le coordinate in radianti del primo punto saranno:
lat1 = 46.06716*Math.PI / 180 long1 = 11.12331*Math.PI / 180 e uguale per il secondo punto...dopodichè nei vari sin e cosin metto i valori sopra ottenuti giusto? grazie ciao ciao |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Dec 2006
Messaggi: 53
|
perfetto adesso corrisponde tutto..grazie mille ancora ciao ciao
|
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: May 2004
Messaggi: 84
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Jul 2008
Messaggi: 255
|
scusate se mi intrometto ma questo programma calcola la distanza tra due punti in linea retta?
Come fa un programma ( tipo route 66 ) a calcolare la distanza, ad esempio, tra milano e parigi ( non in linea retta ) ? conosce la lunghezza di TUTTE le strade del mondo ? perdonate l'ignoranza ![]() |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Dec 2006
Messaggi: 53
|
si in teoria lo fa in linea retta...per l'altra domanda lascio la parola a matematici più esperti....ciao
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Jul 2008
Messaggi: 255
|
speriamo che qualche matematico esperto risponda che sono curioso
![]() |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
Quote:
usi l'algoritmo dei cammini minimo, in cui le interesezioni delle strade sono i nodi e le strade sono i cammini fra i vari nodi, ai quali viene assegnato un peso in base a velocità di percorrenza, lunghezza ecc http://it.wikipedia.org/wiki/Algoritmo_di_Dijkstra
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Dec 2006
Messaggi: 53
|
Avrei un altro piccolo problemino: io dal gps ricevo i dati sottoforma di gradi minuti e secondi, del tipo ad esempio:
lat = 4604.0453, cioè 46° 4.04' 53" Esiste una funzione java che fa automaticamente la conversione?sennò, come posso farla )conosco al formula ma non mi viene in mente come tradurla in codice).. ciao ciao grazie |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:45.