GPXトラックログを間引く・簡略化

概要

GPSロガーで取ったGPXログを公開する際、

  1. 途切れ途切れのトラックログを結合し
  2. 日ごとにそれをまた分割し
  3. それぞれを1トラック400ポイント程度に間引いて簡略化する

という手間がかかっていたため、この一連の作業を一括処理するプログラムを作った。

また、ツーリング中には事前に作成しておいたGPXファイルをAndroidのRMapsや地図ロイドに読み込ませて走行ルートを確認しているのだが、 GPXファイルに余分な要素があると、処理に時間がかかってしまう(あまりに重いと処理できないこともある)。

トラックログを間引くアルゴリズムは折れ線を間引くに記載した点数を指定するタイプのDouglas-Peuckerを実装している。 メルカトル図法に投影した座標で間引いているので、Google Mapsなどメルカトル図法の地図で見た時に形状をよく保存する。

使い方

  1. ボタンを押してGPXファイルを選択
  2. 一括処理する内容をチェックして選択
  3. 「処理実行」ボタンをクリックして少し待つ
  4. 表示されたリンクをクリックしてGPXファイルをダウンロード

注意事項

  • Chrome 53、Firefox 49、Edge、IE 11にて動作を確認
  • IE8では動作しません
  • IE 9, 10は環境が無いため確認できません
  • 重いGPXファイルを処理しようとすると固まります(WorkerではXMLParserが使えないため)
  • 複数ファイルを選択した時の並び順はOSやブラウザ、選択時の操作に依存します

なお、カシミール3DではGPXファイルをXMLとしてパースして読み込んでいるわけではないようで、 空要素(<trkpt lat="***" lon="***" />)の形を認識できない。 そのため<trkpt lat="***" lon="***"></trkpt>の形に修正したものを出力している。

使用例

元のGPSログをカシミール3Dで読み込んだ画面

デフォルト設定で一括処理した後のGPXファイルを読み込んだ画面 (このデータの場合は、6時間途切れたらトラック分割するので1日毎に分割され、それぞれが400点に間引きされている)

更新履歴

  • カシミール3Dでも読めるよう、空要素の場合は<trkpt ***></trkpt>の形に置換するようにした。 (May 4 2014)
  • 優先度付きキューの実装を変更して高速化。(May 28 2014)
  • プログラムを全面書き直し。トラックの自動分割・結合機能追加。 (Sep. 24 2016)
  • 標高をGoogle Maps Elevations APIから取得する機能を追加して統合。 (Sep. 28 2016)