Conversione coordinate GPS da gradi a decimali

Ciao qualcuno mi può aiutare con una conversione di coordinate da gradi a decimali?

Ho questa funzione

double haversine_km(double lat1, double long1, double lat2, double long2)
{
    double dlong = (long2 - long1) * d2r;
    double dlat = (lat2 - lat1) * d2r;
    double a = pow(sin(dlat/2.0), 2) + cos(lat1*d2r) * cos(lat2*d2r) * pow(sin(dlong/2.0), 2);
    double c = 2 * atan2(sqrt(a), sqrt(1-a));
    double d = 6367 * c;

    return d;
}

Che mi calcola la distanza tra 2 coordinate gps in decimali (almeno credo :( ), però io leggo delle coordinate in gradi tipo

45xx.xxxx N 012xx.xxxx E

Sono un po' , anche senza un po' :), una frana in C , ho trovato qualcosa in giro ma non riesco a metterlo in pratica

Grazie in anticipo

Non ho capito il problema. Qual è il formato di partenza e quale quello di arrivo? Vuoi convertire da gradi a decimali o viceversa? Le coordinate in gradi sono in questo formato: 45°12' 34"N Quelle decimali (usando l'esempio precedente) 45.20567

Non capisco queste:

45xx.xxxx N

Dovrebbero magari essere così: 45.xxxxxx N

Cmq se le tue coordinate sono in sistema decimale e vuoi tornare ai gradi devi fare:

float coordinata=xxxxxx;
byte gradi, minuti, secondi;
gradi=coordinata; //prendi solo la parte intera
coordinata-=gradi;
minuti=((float)coordinata-gradi)*60; //minuti
coordinata-=minuti;
secondi=((float)coordinata-minuti)*100;

Dovrebbe funzionare

leo72: Non ho capito il problema. Qual è il formato di partenza e quale quello di arrivo? Vuoi convertire da gradi a decimali o viceversa? Le coordinate in gradi sono in questo formato: 45°12' 34"N Quelle decimali (usando l'esempio precedente) 45.20567

Non capisco queste:

45xx.xxxx N

Dovrebbero magari essere così: 45.xxxxxx N

Quando leggo dal GPS ho questo

45xx.xxxx N = 45° xx' x.xxx"

Vorrei convertirla in decimali come hai detto tu = 45.xxxxxxx

Se dal GPS escono espressi in sessagesimali: http://it.wikipedia.org/wiki/Sistema_sessagesimale

i minuti primi (') li dividi per 60, mentre i minuti secondi (") li dividi per 3600 e sommi tutto

Se escono in decimale e ti servono in sessagesimale fai il contrario, ovvero come dice leo

[quote author=Federico Vanzati link=topic=74838.msg563924#msg563924 date=1318168761] Se dal GPS escono espressi in sessagesimali: http://it.wikipedia.org/wiki/Sistema_sessagesimale

i minuti primi (') li dividi per 60, mentre i minuti secondi (") li dividi per 3600 e sommi tutto

Se escono in decimale e ti servono in sessagesimale fai il contrario, ovvero come dice leo

[/quote]

Dal GPS uscivano così 4535.7684N , 01231.6677E . Ho dedotto quindi che dopo il . fossero indicati i decimali dei primi quindi:

45° 35.7684' = 45 + (35.7684 / 60) = 45.59614

Ed è risultato corretto!

Grazie Mille, pensavo fosse più difficile ... l'ignoranza è una brutta cosa :P