Анализ файлов журнала, содержащих предложения NMEA C ++ - PullRequest
0 голосов
/ 28 января 2020

У меня есть несколько файлов журнала предложений NMEA, которые содержат географические позиции, захваченные камерой. Пример одного из предложений: $ GPRM C, 100101.000, A, 3723.1741, N, 00559.5624, W, 0.000,0.00, 150914,, A * 63

Мой вопрос: как вы считаете, I можно начать с этого? Просто нужно, чтобы кто-то направил меня в правильном направлении, спасибо.

1 Ответ

0 голосов
/ 28 января 2020

Я использую эту функцию контрольной суммы в моем GPSReverse драйвере.

string chk(const char* data)
    {
    // Assuming data contains a NMEA sentence (check it)
    // Variables for keeping track of data index and checksum 
    const char *datapointer = &data[1];
    char checksum = 0;
    // Loop through entire string, XORing each character to the next 
    while (*datapointer != '\0')
        {
        checksum ^= *datapointer;
        datapointer++;
        }
    // Print out the checksum in ASCII hex nybbles 
    char x[100] = {0};
    sprintf_s(x,100,"%02X",checksum);
    return x;
    }

И после этого некоторые добавляют к строке NMEA (скажем, GGA):

string re = chk(gga.c_str());
gga += "*";
gga += re;
gga += "\r\n";

Таким образом, вы можете прочитать до *, вычислить контрольную сумму и посмотреть, соответствует ли она строке после *.

Подробнее здесь .

Каждое предложение начинается с символа «$» и заканчивается последовательностью возврата каретки / перевода строки и может содержать не более 80 символов видимого текста (плюс терминаторы строки). Данные содержатся в одной строке с элементами данных, разделенными запятыми. Сами данные представляют собой просто текст ascii и могут распространяться на несколько предложений в определенных специализированных случаях, но обычно полностью содержатся в одном предложении переменной длины. Данные могут отличаться в степени точности, содержащейся в сообщении. Например, время может указываться с точностью до десятичных долей секунды, или местоположение может отображаться с 3 или даже 4 цифрами после десятичной точки. Программы, которые читают данные, должны использовать только запятые для определения границ поля и не зависеть от положения столбцов. В конце каждого предложения есть контрольная сумма, которая может или не может быть проверена блоком, который читает данные. Поле контрольной суммы состоит из '' и двух шестнадцатеричных цифр, представляющих 8-битное исключающее ИЛИ всех символов между, но не включая, $ и 1011 *. Для некоторых предложений требуется контрольная сумма.

...