erkk84
23-07-2008, 21:26
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:
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));
}
la prima mi da una distanza di 20 km circa, la seconda 12 km circa quando invece dovrebbero essere rispettivamente di 366 e 299 metri (presi dal seguente sito http://www.comunedipinasca.it/main.php?section=utility/distanza.php)...
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
e ho scritto la seguente classe per il calcolo:
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));
}
la prima mi da una distanza di 20 km circa, la seconda 12 km circa quando invece dovrebbero essere rispettivamente di 366 e 299 metri (presi dal seguente sito http://www.comunedipinasca.it/main.php?section=utility/distanza.php)...
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