スキップしてメイン コンテンツに移動

GPSデータの解析支援ソフト ~ まずばベータ版を公開します!

GPSデータの解析支援ソフトを公開します!



Mt. Whitney Lotteryも締め切られました!
今年のMt. Whitney Lotteryも先日(315日)締め切らられて、結果は324日に発表されるようです。今年は13,638のアプリケーション、合計64,939人の登山者の応募があったようです。サイトの統計によれば、66%のアプリケーションがオーバーナイトの許可を希望していて、19%の日帰り、17%のオーバーナイトが当選したようで、残りは残念ながら落選になったようです。詳細は、Inyo National Forestのサイトに載っています。

GPSのトラッキングデータの解析支援ソフトを公開しました!
先日より、過去のMt.Whitney登山のGPSトラッキングデータの詳細を分析していますが、今日は、分析に使っているプログラムを公開しようと思います。現在、Java版とPython版の両方を使っていますが、セキュリティの観点から、このような個人のブログからのダウンロードは抵抗があるという方も多いと思いますので、Python版の全てのソースコードを公開します。(GNU GPLv3ベースのライセンスです)
コードのダウンロードや改変は自由ですが、各個人の責任において使用してください。万が一何らかの損害、障害が起きても当方は一切責任を負いませんので予めその旨を了解の上使用してください。プログラムは、Python 3.4.3Windows 8.164bit)上で動作確認をしていますが、あくまで個人の限られた使用での確認で動作を保証するものではありません。
サンプルは、BOX.COMにおいてあります。上記をご理解の上ご自由に使用してください。
サンプルプログラム
サンプル「waypoint」ファイル
特にドキュメントは用意していませんが、ブログで簡単に紹介しておきます。

使用環境

公開しているソフトウエアは、Python 3.xで書かれていますので、このプログラムを実行するには、Pythonの実行環境をお使いのPCにダウンロードしてインストールする必要があります。実行環境はインターネットから無料でダウンロードできます。Windows,Mac,Linuxなど一般的なOSはサポートされています。

読み込めるファイル
確認しているのは、私のGarmin Connectのアカウントからダウンロードした、GPXTCX形式のファイルです。他のソースからのGPXファイルは試していません。プログラムは、各記録レコードに、位置情報と時間情報があるのを前提にしており、位置情報が抜けたレコードは無視されるようになっています。これは、時折GPSが位置データを衛星から取得できない場合、心拍数などのデータのみを記録する可能性があるので、その場合はそのレコードは無視しています。GPXファイルの場合、位置情報は必須の様なので問題ないと思いますが、TCXファイルの場合は、インドアアクティビティもサポートするようにしているためか、位置情報が抜けたレコードが存在する可能性はあります。
Waypointファイル
ハイキングなどで、ある特定の地点のラベルをデータレコードにつけたい場合に使用します。サンプルファイルがプログラムと同様にBOX.COMからダウンロードできるようになっています。基本的に、登山口や、山の頂上などの地点を選んで使用できます。データは、地図などから緯度と経度を、「度」、「分」の形式で調べて、その地点のラベル情報を入れるだけです。サンプルのファイルには標高も入っていますがこのバージョンのプログラムでは使用していません。プログラムを起動すると、ウインドウが立ち上がって、「Maximum Location Error」というフィールドがありますが、入力した位置と、GPSの位置情報がここで指定した以下の距離の場合は、その点とみなしてラベルを付けるようになっています。サンプルは、Mt. Whitney Trailの場合を想定していて、登山口の「Whitney Portal」、「North Forkへの分岐」、「Lone Pine Lakeへの分岐」、「Outpost Camp」、「Trail Camp」、「Trail Crest」、「John Muir Trailの分岐」そして、「頂上」になっています。
基本機能
GPSのトラッキングファイルを読み込むと、各レコードのリストが表示されて、右側に各レコードの基本情報が表示されます。範囲を限定したい場合は、「Sampling Range」で秒単位のタイムスタンプを指定すると指定された範囲内のレコードが表示されます。
Maximum Moving Distance for a rest」のフィールドでは、休憩の定義を指定できます。これは、1分辺りの移動距離の上限値をメートルで入れると、それ以下の移動距離のレコードを休憩とみなしてラベルをつけます。また、表示されているレコードの休憩の合計時間を、「Total Resting time」として、分単位で表示しています。あとは、GPSのトラッキングデータの基本情報から幾つかのデータを計算して表示しています。主な物は、前のレコードとの差を計算して、区間のスピード、斜度(三角関数の「tan」の値、標高差/移動距離)、などを表示しています。
通常のレコードは数秒ごとに記録されていますが、実際のハイキングでは数秒ごとのデータは必要ないので、もう少し大まかな記録に再構成することができます。これは、「Sampling period」のフィールドで秒で指定すると、だいたいその時間でデータを抜き出して、データは平均値を計算して、表示しています。これにより、時折ある特異点(恐らく衛星の切り替えやカバレッジの変化による測定エラー)の影響を低減できます。
そして、表示されているレコードを、CSVファイルで保存する事ができます。このファイルはMicrosoft Excelなどの表計算ソフトで読み込むことができて、さらに詳細のデータ処理や、グラフの作成をする事ができます。
こうした基本機能は、Garmin Connectでもみる事が出来ますが、範囲を絞って分析したりする場合は、このツールを使うとより詳しく見る事ができるようになります。また、先に紹介したWaypointの機能を使えば、登山の記録をある程度正確に抜き出すことも可能です。
その他
Sampling period」、「Maximum Location Error」、「Maximum Moving distance for a rest」などの数値を変更した場合は、ファイルの読み込みや、再構成の処理を再実行する必要があります。公開されているバージョンは自動で表示の更新は行いません。距離の計算は、TCXファイルの場合は、TCXファイルの中の距離情報を使っています。このデータはどのように計算された物かは不明です。GPXファイルの場合は緯度、経度の位置情報から計算しています。地球を回転楕円体と仮定して計算する方法をインターネットから入手して実装しています。(Vincentry’s Formula、日本語のサイトではヒュベニの式と表記されているサイトが多いです)計算には、WGS84World Geodetic System 1984)で定義されている値を使って計算しています。しかし、この距離はTCXの中の距離とは一致していません。短い区間での差は少ないですが、長い区間では十数パーセントの違いが出ています。恐らく、TCXの値の方が正確だと思われます。サンプルによる再構成の計算では基本的に、各レコード間の差をレコード間の時間差で割って正規化してその値の区間平均を計算しています。(つまり各区間の平均変化利率=時間微分の値)これによりある程度、測定エラーの影響を取り除くことができます。実際の位置情報や標高の誤差は結構大きいようです。位置情報は100m前後ばらつく事もあって、標高も毎回違う値になっています。(気圧ベースの高度計の値を使っているためと考えられます)必要に応じて、地図の標高などを合わせて処理する必要があると思われます。Mt. Whitney Trailの場合、距離が長いので、100m程度の差は余り問題にならないかと思います。誤差は使用している衛星が切り替わると、値が全体的にシフトするので補正するのは簡単ではありませんので、プログラムでは特にエラー補正の機能は入れていません。
基本的には、GPXTCXXMLファイルの読み込み部は、Pythonに標準でサポートされているモジュールを使って読んでいます。従って、ネームスペースの部分を変更すれば、若干形式が異なるファイルでも最小限の変更で読めるようになると思います。
大したプログラムではありませんが、これでも、GPSのトラッキングデータの詳細を見るのには、一般的なWebサイトの表示よりは細かく調べる事が可能になります。
一応、使用されてご意見や、不具合の情報があればお知らせいただけると助かります。
この先、このツールを使ってデータの解析やツールの機能向上を行っていきます。取りあえず、Ver.0.1でベータ版のリリースで、若干手直しをして再度お知らせします。
今回は、このツールの紹介でした。
なお、プログラムは予告なしに削除する事もあるかと思います。予めご了承ください。



コメント

このブログの人気の投稿

BaoFeng UV-5R ~ 中華トランシーバ その後

BaoFeng UV-5R  格安の中国製トランシーバーを入手して約1ヶ月余りたちました。その後の報告です。 静かなアメリカのV/UHF帯  まだ家にアンテナを立てたりしていませんので、基本的には付属のアンテナに取りあえずつけた、マグネットベースのアンテナで時折144MHz帯と、430MHz帯のFMを聞いています。前の投稿で少し触れましたが、私の住む北カリフォルニア(サンフランシスコ近郊)では、殆ど普通のFM(Simplex)での交信を耳にしません。耳にする交信はほぼ、リピーター経由の物と言うのが現状です。一方で、リピーターの数はかなりの数があって、インターネットで調べると、この辺りはどこに行っても複数のリピーターにアクセスできますし、周辺の高い山の上などにも設置されていて、リピータのカバーエリアも網羅されている感じです。  そんなわけで、普通のアナログのFMで使えるチャネル(FM Simplex)は、144MHz帯で26チャネル、430MHz帯に至っては3チャネルしかありません。一方でかなりの帯域がリピータ用として割り当てられています。 BaoFengを使うたってにあたって  最初は、アマチュアバンド内をスキャンして誰か交信していなか探していたのですが、このモデルのスキャンは余り速くはなく、かなりの時間がかかってしまいます。実際に話をしているのを見つけるには、もう少し的を絞らないと効率が悪いので、必要なチャネルをプログラムして、プログラムしたチャネルをスキャンする方が効率がよい事に気づきました。今回入手した、UV-5Rというモデルは、全部で128チャネルをプログラムする事ができます。この辺は、日本の八重洲とか、ICOM、KENWOODなどの物は1000チャネルとかプログラムできるので、それを考えると少ないと言えますが、実用上は取りあえず、大きな問題ではないようです。  それで、まずはどのようにプログラムするかですが、まずは、全部で29あるFM Simplexのチャネル29をプログラムする事にしました。実態を考えると余り使うケースはないと思いますが、それでもハイキングなどに行ったときに仲間と連絡に使うには便利ですが、周波数を覚えるのも大変なので予めプログラムしておくことにしました。これで、128チャンネルのうち、29が決まったので

バッティングセンター ~サンフランシスコ ベイエリアにもあります!

折れた金属バット! サンフランシスコベイエリアのバッティングセンター 今週も暑さでアウトドア関係は休止中でした。実際は風もあって気温はそこそこ高いのですが割りとすごし易い週末でした。日本語の補習校の集中授業があって子供たちもちょっと大変なので、現地校が夏休みに入っても遠出を控えました。 本格的な夏休みの家族イベントももう暫く先送りという事になっています。 そんな中この週末はバッティングセンターに行ってきました。 バッティングセンターは「Batting Cage」と呼ばれていて、数はそれほど多くないもののこのエリアにも幾つかあって、たまに行って遊んでいます。今日は All Star Academy   というSanta Claraの施設に行ってきました。     2901 Mead Ave Santa Clara 95051 に行ってきました。平日は正午から午後9時まで週末の土日は、午前9時から午後6時まで営業しているようです。 日本では屋外にゴルフの打ちっぱなしの練習場のようにネットを張って営業している施設が多いと思いますが、このエリアでは日本に近い屋外営業もありますが、倉庫などの屋内にネットを張って営業しているタイプの施設も多く、今回の施設は屋内タイプでした。 システムは、プリペイカードを買って1回(20球)で3ドルで、幾つか球速の違うブースを選んで遊ぶところでした。バット、ヘルメットは無料で貸してもらえました。野球とソフトボールも選択できまるようになっていて、子供たちは球速の遅いブースやスローピッチのソフトボールを選んで楽しんでいました。 日差しが強く暑い夏のアクティビティには屋内のバッティングセンターも悪くないようでした。 金属バットが折れた! さて、家族で楽しんでいたのですがちょっとしたハプニングが一件ありました。比較的球速の早いブース(60マイル/時間のソフトボール)で遊んでいたところ球がバットの根元に近い部分にあたり明らかに違う音がしたと思ったら、次の球を打ったところなんと金属バットが真っ二つに折れてしまいました。 幸い折れたバットは人のいない方に飛んで怪我はありませんでしたが、ちょっとびっくりしました。 折れた破片も係りの人がすぐに回収して事なきも得ましたが、金属バットも折れるのですねぇ~

GPSデータの解析 (3) ~ TCXファイルの中身

TCXのデータの例 実際のデータは? 実際、取りあえず試用のプログラムは既にあって、データを読み込めるようになっています。でも、興味がある方もいらっしゃるみたいなので、もう少し詳しい中身について今日は書いてみます。 上の例が、TCXファイルの例です。これは、昨年Mt.Whitneyに行った時の冒頭のデータを一部抽出した物です。一連のデータとして、時刻、位置情報(緯度と経度)、標高、心拍数などが入っています。TCXファイルには、距離も入っているのが分かるかと思います。これは、スタートからの積算距離になっています。 先にも書きましたが、TCXファイル自体は、XMLファイルなので、ファイルはタグを基に、そのタグの階層で構成されています。例では一部を抜き出していますが、「Trackpoint」というタグは別の上位の階層のタグに含まれていて、この前後には、別の「Trackpoint」が同じレベルで羅列されているような形式になっています。このタグ一つ一つが個々の時刻のデータになるわけです。 この「Trackpoint」の下位には、個々のデータが別のタグで含まれているのが分かるかと思います。 基本的に、各タグのデータは最初の「<>」で囲まれた所からスタートして、</>という、同じタグで、先頭に「/」が入った所で終わる様になっています。 つまり、個々のGPSのトラックデータが欲しい場合は、このTCXファイルの場合、「Trackpoint」というタグを探して、その中のデータを抜き出していけばよい事になります。ファイルも、テキスト形式のファイルなので、少々プログラムに慣れた方ならば簡単なプログラムでデータを抜き出すことができるわけです。 GPXファイルは? GPXの同じデータの例 さて、これが同じ時刻のデータをGPXファイルから抜き出してみました。こちらも同じXML形式なので、似ていますが、少し書き方が違うのが分かるかと思います。こちらの場合は、「trkpt」というタグに個々の時刻のデータがあります。位置情報は最初の「trkpt」のタグの中に埋め込まれていて、その後に、個々のデータが少し別のタグで入っているのが分かるかと思います。こちらの場合、積算距離の情報は入っていないので、位置情報から自分で計算する必要があります。これは、調べてみたのですが、少