Я работал с NMEA, мой опыт:
Формат NMEA разработан плохо.
Профессиональные приложения, которые имеют прямой доступ к GPS-приемнику, должны избегать NMEA. Они должны учитывать конкретный двоичный формат устройства GPS.
В дополнение к темам, упомянутым Адамом Дэвисом выше:
- Не определено, как обращаться с недействительными атрибутами: например, Если транспортное средство стоит на месте, особенно если оно не двигалось с момента запуска приемника GPS, атрибут курса / курса является недействительным; Большинство получателей выведет пустой атрибут ",,". Но это не определено.
- Поле времени: некоторые поставщики используют дробную часть после второй. Точно не указано (?), Разрешено это или нет; некоторые устройства делают это, другие нет. (Далее: предложение GGA определяет две цифры после второй, в предложении RMC используются целые секунды)
- Порядок предложений RMC, GSV и т. Д. Отличается от одного получателя к другому.
Это приводит к проблеме, чтобы знать, когда определение местоположения завершено. Либо вы проверяете, что пришла новая отметка времени, затем вы знаете, что позиция завершена, но тогда вы потеряете одну секунду, с точки зрения поведения в реальном времени. Или вы знаете своего получателя и знаете, какое последнее предложение исправления. Или вы делаете некоторый «искусственный интеллект» для анализа порядка в первые десять секунд, а затем вы знаете, какой из них является последним.
Вы можете посмотреть в спецификации протокола SIRF и UBLOX и посмотреть, какие у них огромные главы, чтобы описать, как они интерпретируют протокол NMEA.
Если кто-то знает действительно хороший анализатор / писатель NMEA, написанный на java или Objective-C, с открытым исходным кодом, а не под лицензией GPL, пожалуйста, дайте мне знать.