Webサービスプロジェクト ~ 他のGPSファイルフォーマット
2019年8月23日
他のGPSファイルフォーマット
GPS機器で記録したデータから登山やハイキングに役立つ解析をするWebサービスの制作を記事にしています。
これまで書いてきたのは
- TCX形式のGPSデータを読み込む
- 読み込んだデータの表示
- 時刻の扱い
です。今日は他のGPSデータのフォーマットについて書いてみます!
GPX形式
TCX形式は扱いやすいので最初に読み込むデータの形式として選びました。
実は、GPSのデータ形式としてはGPX形式の方が広く使われています。
なので、広くいろいろな方に使って頂くにはGPX形式のサポートも重要になってきます
TCX形式が便利なのは、ファイルの中に距離情報を計算して予め入れ込んでいるので
距離の処理が必要ない所にあります。
つまり、位置情報は地図上に移動したコースを出したりしない限りは必要ありません。
一方でGPX形式では、距離情報は含まれていないので、
位置情報から計算する必要があります。
実は同じではないGPX形式
色々なGPXファイルを見てみると中身が微妙に違う事が分かります。
同じ形式なのに何故違うのかというと、拡張部分が違います。
元々のGPXファイルは位置情報を記録するための物で、位置情報や時刻以外は
余り考慮されていませんでした。
後から発売されたGPS機器が、位置情報以外にも、心拍数や温度、歩数などを記録できるようにしたため、後から拡張して記録できるようにしたため、
若干内容が異なっています。
私は基本的にGarmin社でGPS機器を揃えているので良く扱うファイルは
ガーミン社のサービスであるGarmin Connectからダウンロードした物です。
以前Javaで同じようなアプリを開発した際に、調べたところ、別のサービスから
ダウンロードした場合、心拍数などの記録のタグの名前(ネームスペース)が
幾つかある事が分かっています。
今回の方針は?
そこで今回の方針は、TCX形式に加えて、
- Garmin Connectが生成するGPX
- STRAVAが生成するGPX
- Runkeeperが生成するGPX
を自動で判別してサポートする事を考えています。
今回扱うファイルは全てXML形式なのでヘッダー部分(ファイルの最初の部分)を
読み込めばファイルがGPSのデータかどうかは判別できます。
TCX形式かGPX形式かはこの部分で判別します。
これで、位置情報、標高、時刻の情報は読み込むことができるので、
後は拡張である心拍数の情報を読み込めれば良い事になります。
他にも拡張機能で、スピードや、歩数、温度などの情報がある場合もありますが、
必要な情報に絞り込んで、出来るだけ多くのファイルをサポートできるようにします。
ヘッダーから得られる情報
GPSのデータファイルのヘッダーにはファイルがどのようなタグを使って
構成されているかを示すURLが書かれています。
この中の「TrackPointExtension」を定義している名前空間(ネームスペース)を
見つけて読み込むようにします。
- Garminが生成するファイルでは「ns3」というネームスペースを使用
- STRAVAとRunkeeperでは、「gpxtpx」というネームスペースを使用
このネームスペースにGPX形式の場合、「hr」というタグをつけて心拍数のデータを
保持しています。
これが見つけられた場合は、心拍数を読み込むという事にすれば、
殆どのGPX形式のファイルはサポートできそうです。
課題は
- ヘッダーをチェックしてGPX形式かTCX形式を判別する
- ヘッダーから拡張の心拍数に使っている名前空間を抽出する
- 位置情報から距離の計算をする
という事になります。ヘッダーのチェックはJavascriptの機能を使えばできます。
距離の計算はインターネットを計算すると幾つかの標準的な計算方法が見つかります。
今後はこの辺をもう少し詳しく解説していきます!
コメント
コメントを投稿