Hola usuario de nuestro sitio, hemos encontrado la solución a tu búsqueda, continúa leyendo y la encontrarás aquí.
Solución:
El formato de las coordenadas NMEA es (d)ddmm.mmmm
d=grados y m=minutos
Hay 60 minutos en un grado, así que divida los minutos por 60 y súmelo a los grados.
Para la Latitud=35.15 N
35,15/60 = 0,5858 N
Para la Longitud= 12849.52 E,
128+ 49,52/60 = 128,825333 E
En php, podrías hacer esto:
Sí, el formato NMEA es ddmm.mmmm, n/s (d)ddmm.mmmm, e/w
Para llegar a grados decimales a partir de grados y minutos, utiliza la siguiente fórmula:
(d)dd + (mm.mmmm/60) (* -1 para W y S)
Aquí hay una calculadora pequeña y agradable: http://www.hiddenvision.co.uk/ez/
Aquí hay una función C minimalista para hacerlo.
Devuelve coordenadas decimales y se alimentará con la coordenada NMEA y el respectivo cuadrante o carácter “indicador” (N,S,E,W). P.ej:
float latitude= GpsToDecimalDegrees("4349.7294",'N');
// latitude == 43.82882
float longitude= GpsToDecimalDegrees("10036.1057",'W');
// latitude == 43.82882
No está optimizado pero debe ser legible, debe ser seguro y hace el trabajo:
/**
* Convert NMEA absolute position to decimal degrees
* "ddmm.mmmm" or "dddmm.mmmm" really is D+M/60,
* then negated if quadrant is 'W' or 'S'
*/
float GpsToDecimalDegrees(const char* nmeaPos, char quadrant)
float v= 0;
if(strlen(nmeaPos)>5)
char integerPart[3+1];
int digitCount= (nmeaPos[4]=='.' ? 2 : 3);
memcpy(integerPart, nmeaPos, digitCount);
integerPart[digitCount]= 0;
nmeaPos+= digitCount;
v= atoi(integerPart) + atof(nmeaPos)/60.;
if(quadrant=='W'
return v;
Comentarios y calificaciones
Si te sientes motivado, tienes el poder dejar una reseña acerca de qué te ha impresionado de esta sección.