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

GPXファイルを一括で結合・分割・間引き・軽量化などを行うオンラインツールです。

概要

GPSロガーで取ったGPXログをウェブサイト用に公開する際、

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

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

その他、ツーリング前に作成しておいたGPXファイルをAndroidのRMapsや地図ロイドに読み込ませて走行ルートを確認する際に GPXファイルに余分な要素があると、処理に時間がかかってしまう(あまりに重いと処理できないこともある)ため、ポイントを間引いたり、余分な情報を削除する機能を付けています。

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

使い方

  1. ボタンを押してGPXファイルを選択
  2. 一括処理する内容をチェックして選択(設定項目の上から順に処理が流れます)
  3. 「処理実行」ボタンをクリック
  4. 表示されたリンクをクリックしてGPXファイルをダウンロード

注意事項

  • Chrome、Firefox、Edgeにて動作を確認しています
  • あまりに重いGPXファイルを処理しようとすると固まります
    PCの性能によりますが、20MBを超えるような場合はご注意ください
  • 複数ファイルを選択した時の並び順はOSやブラウザ、選択時の操作に依存します
  • GPX1.0と1.1のファイルを結合した場合、名前空間やスキーマの違いを無視して結合しますので完全に正しいGPXファイルにはならない点に注意してください
    (おそらくほとんどのアプリケーションは無視しますので問題が生じるのはレアケースと思いますが)

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

使用例

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

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

更新履歴

  • May 4 2014: カシミール3Dでも読めるよう、空要素の場合は<trkpt ***></trkpt>の形に置換するようにした。
  • May 20 2014: 優先度付きキューの実装を変更して高速化。
  • Sep. 24 2016: プログラムを全面書き直し。トラックの自動分割・結合機能追加。
  • Sep. 28 2016: 標高をGoogle Maps Elevations APIから取得する機能を追加して統合。
  • Aug. 8 2019: ダウンロードファイル名を元の名前から変更。
  • Mar. 31 2020: 各GPXファイルのname要素をファイル名にする機能を追加。
  • Dec. 5 2020: 処理内容のチェック状態、選択状態を保存し、次回アクセス時のデフォルト値とする機能を追加。
  • Mar. 4 2021: スマホ画面でもレイアウトが崩れないよう変更し、縦幅を自動調整。
  • Jan. 18 2022: 地理院地図の標高APIから取得する機能を追加。
  • Jan. 20 2022: 地理院地図の標高APIから取得する先を標高APIから標高タイルに変更して高速化。
  • Feb. 12 2022: 標高タイルをCache APIを利用してローカルにキャッシュして高速化。
  • Apr. 27 2022: ファイルのドラッグアンドドロップに対応。
  • Apr. 25 2023: 間引き後の点数の直接数値指定に対応。
  • Apr. 29 2023: name要素の値をファイル名から取る機能を追加。
  • May 20 2023: Douglas-Peuckerの間引き処理でメルカトル図法への投影式に誤りがあったので修正。