Чтение данных GPS с гаджета - PullRequest
0 голосов
/ 22 марта 2011

У меня есть гаджет GPS, и я хотел бы знать, как получить с него информацию с помощью C ++ (координаты)?

1 Ответ

5 голосов
/ 22 марта 2011

Это , вероятно, легче ответить, чем указано в комментариях.Хотя большинство устройств GPS do поддерживают проприетарные (обычно) двоичные протоколы, почти все, даже близкие к текущим, также поддерживают данные в формате NMEA и будут предоставлять их по умолчанию.Независимо от того, подключены ли вы через последовательный порт, Bluetooth или USB, большинство из них также выглядят как пользовательские программы, такие как последовательный порт.

IOW, вы, вероятно, можете поддерживать что-то вроде 90% разумно текущих единиц GPS, просто открыв последовательный порт, ичтение данных из него.Единственная уродливая часть - то, что стандарт NMEA для формата данных довольно дорогой (хотя это не так плохо, как это было раньше - теперь вы можете купить только те части, которые вам интересны, чтоскажем, только приложение B, IIRC).

К счастью, если вы не планируете сертифицировать свое программное обеспечение для морской или воздушной навигации, вам, вероятно, это не нужно - их достаточно веб-сайты , которые охватывают (несколько) типов сообщений, которые вам, вероятно, небезразличны.В этом отношении, если вы просто откроете терминальную программу на нужном COM-порту и посмотрите на данные, не составит труда найти широту / долготу самостоятельно (по крайней мере, если у вас есть хотя бы смутное представление о том, где вы находитесь.are).

Это в основном CSV формат - одна запись на строку, поля разделены запятыми.Все это в обычном тексте ASCII / ANSI, поэтому получение координат в основном сводится к проверке того, что первое поле говорит, что это правильный тип записи ("$ GPGGA"), затем получение полей 3, 4 5 и 6 (3 и 4).являются широтой и 5 и 6 долготы - 3 и 5 дают число, 4 и 6 имеют «N», или «S» и «E» или «W» для указания северной / южной широты и восточной / западной долготы).Возможно, вы также захотите проверить, что поле после этого содержит «1» или «2», что указывает на нормальное или дифференциальное GPS-фиксирование соответственно («0» будет означать отсутствие GPS-фиксирования, поэтому недопустимые данные).

Не то чтобы это имело большое значение, но вы, вероятно, также должны понимать, что есть несколько других типов полей, которые вы, вероятно, получите, и некоторые из них также содержат данные исправлений.$ GPGGA как раз тот, который я использовал - есть другие, которые, вероятно, столь же хороши, но у меня никогда не было особой причины смотреть на других, потому что это было достаточно для того, что мне было нужно / сделано.

Редактировать: Вот пример дампа данных точно , полученных от GPS, в данном случае через виртуальный последовательный порт Bluetooth:

$ GPGGA, 090809.103,3901.4345,N 10448,2482, W 0,0050,0,2078,2, M, -21,4, M, 0,0,0000 * 43 $ GPRMC, 090809,103, V, 3901,4345, N, 10448,2482, W, 0,00,0.00,220311, * 07$ GPVTG, 0,00, T ,, M, 0,00, N, 0,0, K * 60 $ GPGGA, 090810,103, 3901,4345, N, 10448,2482, W, 0,00, 50,0, 2078,2, M, -21,4, M, 0,0,0000.* 4B

Во второй записи $ GPGGA:

$ GPGGA, 090810,103,3901,4345, N, 10448,2482, W, 0,00,50,0,2078,2, M, -21,4, M, 0,0, 0000 * 4B

"$ GPGGA" - это идентификатор типа записи ("Предложение").
"090810.103" - текущее время UTC.
"3901.4345, N" - широта.
"10448.2482, W" - это долгота.
Следующее: "0" говорит вам, что предыдущийширота / долгота не действительные.

Широта и долгота оба отформатированы (IIRC) с двумя последними местами перед десятичной точкой являются минутыи что после десятичной точки - доли минуты, поэтому «3901.4345» на самом деле означает 39º 1.4345 'северной широты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...