Saltar al contenido

¿Cómo convertir la latitud y la longitud de los datos de formato NMEA a decimal?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *