GPSロガー M-241cのデータ形式

先日のこのブログのコメントで、『福岡→羽田の(GPSロガーの)飛行記録、ちょうだい!』というリクエストがありました。


首からぶら下げて使用する"Holux社製GPSロガー M-241c"は、(設定で変更できるけど)電源を入れておけば5秒毎に勝手に現在位置を記録してくれるアイテムです。

f:id:vfr750f2:20100322101757j:plain
・GPSロガー M-241c 写真のフィルムケース大のコンパクトさ

当然自宅に帰り着くまで電源を入れているので、データをそのまま渡してしまうと、出張先のことから自宅の場所まですべて筒抜けに!(実際は何度か電源入れ直しているのでデータファイルは複数に分かれているけどネ。)


そこで、データの中身を調べて都合の良い部分だけを提供すべく、中身を解析してみることにしました。


まず、GPSロガーをPCに接続して付属してきたユーティリティーでデータを吸い出すと、2種類のファイルができます。

  1. 拡張子.TRL形式のファイル →GPSロガー内部で記録されているデータそのまま
  2. 拡張子.KML形式のファイル →上記ファイルをGoogle Earthで軌跡が見られるように変換したデータ

KML形式であれば、Google Earth上で軌跡を編集できるのですが、今回リクエストがあったのはTRL形式・・・・


よし、資料がないかググってみよう・・・・ヒット!
既にたくさんの先駆者さまが、解析を済ませておりました。

http://www.motohasi.net/GPSTools/TrlInfo.phpHOLUX m-241 LoggerUtility .trlファイル構造の覚書』より引用

本体バージョン1.12以下(移動速度が記録されない版)

項目 サイズ 備考
時間 4バイト 1970年1月1日0時0分0秒からの秒数 32bits符号なし整数 リトルエンディアン
緯度 4バイト IEEE754(IEEE二進化浮動小数点数演算標準) 32Bits単精度形式
経度 4バイト IEEE754(IEEE二進化浮動小数点数演算標準) 32Bits単精度形式
高度 3バイト 変形IEEE754形式 上位24Bitsのみ使用
チェックサム 1バイト 時間,緯度,経度,高度15Bytesのバイト単位排他的論理和

本体バージョン1.13以降(移動速度が記録される版)

項目 サイズ 備考
時間 4バイト 1970年1月1日0時0分0秒からの秒数 32bits符号なし整数 リトルエンディアン
緯度 4バイト IEEE754(IEEE二進化浮動小数点数演算標準) 32Bits単精度形式
経度 4バイト IEEE754(IEEE二進化浮動小数点数演算標準) 32Bits単精度形式
高度 3バイト 変形IEEE754形式 上位24Bitsのみ使用
速度 4バイト IEEE754(IEEE二進化浮動小数点数演算標準) 32Bits単精度形式
チェックサム 1バイト 時間,緯度,経度,高度,速度19Bytesのバイト単位排他的論理和

普通の人ならナニコレ(?)と感じる資料ですが、コンピュータ技術者、それもハードウェアに近い部分を知ってる人には・・・・なるほど単純ね!
16バイトを1レコードとして、記録したポイントの数だけズラズラ~っと並んでいるだけ。


ということは、提示したいデータの始点と終点の時間を調べて、それを頼りにレコードの位置を割り出し、あとはバイナリエディタでバッサリとカットしてしまえばいい・・・・。(しかも16バイト単位で編集とは・・・・なんてやりやすいんだ!)


一応興味があって、本当にTRLデータが解読できるかプログラムを作ってみました。(あくまでチョロっと作っただけなので、細かい指摘は無しで!)

http://tarsama.sakura.ne.jp/effect/blog.100324.test.c なんちゃって解読プログラム (プロセッサ仕様によりつかえない場合アリ!)

おお~、簡単に解読できました。


これでレコード位置の特定も簡単だね♪
サクサクと作業を完了し、無事に自宅周辺をカットしたデータを作り、電子メールで送信しておきました。

https://…/2010/06/22/ 飛行機の飛行経路