私は NMEA と協力してきました。私の経験は次のとおりです。
NMEA 形式は適切に設計されていません。GPS 受信機に直接アクセスするプロフェッショナル アプリケーションでは、NMEA を避ける必要があります。彼らは、GPS デバイスの特定のバイナリ形式を考慮する必要があります。
上記の Adam Davis が言及したトピックに加えて:
- 無効な属性を処理する方法が定義されていません。たとえば、車両が静止している場合、特に GPS 受信機を起動してから移動していない場合、コース/進行方向の属性は無効です。ほとんどのレシーバーは、空の属性「,,」を出力します。しかし、これは未定義です。
- 時間フィールド: 一部のベンダーは、秒の後に小数部分を使用します。それが許可されているかどうかは正確に指定されていません(?)。一部のデバイスはそれを行い、他のデバイスはそうしません。(さらに: GGA 文は秒の後に 2 桁を定義し、RMC 文は整数秒を使用します)
- RMC、GSV などのセンテンスの順序は受信者によって異なります。これは、位置修正がいつ完了したかを知るという問題につながります。新しいタイムスタンプが到着したことを確認すると、位置が完了したことがわかりますが、リアルタイムの動作に関しては、1 秒遅れます。または、受信者を知っていて、修正の最後の文がどれかを知っています。または、「人工知能」を使って最初の 10 秒間の注文を分析し、最後がどれかを判断します。
SIRF およびUBLOX プロトコル仕様を調べて、NMEA プロトコルをどのように解釈するかを説明する膨大な章を参照してください。
Java または Objective-C で書かれた本当に優れた NMEA パーサー/ライターを誰かが知っている場合、それはオープン ソースであり、GPL ライセンスの下ではありません。私に知らせてください。