Большинство GPS-приемников выводят информацию о местоположении, используя протокол NMEA, вам нужен анализатор NMEA, написанный на C, посмотрите Библиотека NMEA в качестве примера.
Библиотека содержитколичество примеров приложений, вероятно, простейшее для понимания / реализации, находится в каталоге * 1005. *
#include <nmea/nmea.h>
#include <string.h>
int main()
{
const char *buff[] = {
"$GPRMC,173843,A,3349.896,N,11808.521,W,000.0,360.0,230108,013.4,E*69\r\n",
"$GPGGA,111609.14,5001.27,N,3613.06,E,3,08,0.0,10.2,M,0.0,M,0.0,0000*70\r\n",
"$GPGSV,2,1,08,01,05,005,80,02,05,050,80,03,05,095,80,04,05,140,80*7f\r\n",
"$GPGSV,2,2,08,05,05,185,80,06,05,230,80,07,05,275,80,08,05,320,80*71\r\n",
"$GPGSA,A,3,01,02,03,04,05,06,07,08,00,00,00,00,0.0,0.0,0.0*3a\r\n",
"$GPRMC,111609.14,A,5001.27,N,3613.06,E,11.2,0.0,261206,0.0,E*50\r\n",
"$GPVTG,217.5,T,208.8,M,000.00,N,000.01,K*4C\r\n"
};
int it;
nmeaINFO info;
nmeaPARSER parser;
nmea_zero_INFO(&info);
nmea_parser_init(&parser);
for(it = 0; it < 6; ++it)
nmea_parse(&parser, buff[it], (int)strlen(buff[it]), &info);
nmea_parser_destroy(&parser);
return 0;
}
При реализации с приемником GPS вместо передачи фиксированных строк (в buff
) ванализатор, вам просто нужно передать полученные строки NMEA из приемника в анализатор.Собранные данные будут доступны в структуре info
.
Если вы хотите разработать свой собственный синтаксический анализатор, посмотрите здесь для подробной разбивки различных сообщений, которые могут быть выведеныот приемника GPS.Большинство GPS-приемников выдают только RMC, GGA, GSA, GSV, GLL, VTG и (редко) ZDA.