GPS走行ログを変換、軽量化する便利ツール GPSBabel

2022年4月2日土曜日

GPS GPSBabel マップサービス 自転車

t f B! P L
GPSBabel

GPSログのファイル形式を変換したり、軌跡を間引いてファイルサイズを小さくできる便利ツール GPSBabel をご紹介します。

ブログに走行マップを埋め込みたい

ロードバイクで遠出する際、GPSサイコンXOSS Gを愛用しておりGPSログをSTRAVAにアップロードしてニヤニヤしていましたが、せっかくなのでブログ等に走行マップを貼り付けたくなるものです。

STRAVA埋め込み機能の不満

はじめのうちはSTRAVAの埋め込みをブログへ貼り付けしていましたが、レスポンシブ対応がいまいちなのとマップを貼り付けるのならやはりGoogleマップのようにその場でドラッグ、拡大できるようにしたくなりました。

マップサービスのJavaScript APIを使う

結局LefletやmapboxなどJavaScript APIを使うことにしました。

そうするとGPSログをSTRAVAなどからダウンロードしてJavaScriptから読み込むことになりますが筆者が利用しているブログサービス、Bloggerでは外部ファイルを読み込むことができません。記事作成画面でJavaScriptコード内に直接GPSログを貼り付ける必要があります。

巨大なGPSログをBlogger記事にコピペ

STRAVAからダウンロードしたログはGPXファイルです。GPXはテキストファイルなのでそのまま、またはGeoJSONに変換してからフォーマット文字列として変数に代入するのですが、とにかく行数が多く、記事作成画面がほとんどGPSログで埋まってしまう状態です。

例えば直近で大阪の万博記念公園から奈良の平城宮跡に行った際のGPSログはマップに表示すると下のようになりますが、座標はなんと7874点にもなります。ここでは画像で表示させています。

GPSログをマップに表示

これでは読み込みも時間がかかりそうですし、記事編集をしたくなくなります。

GPSBabelでGPSログを間引き

自分でスクリプトを書いてある1個前の座標と差を比較してあまり移動していなければ間引くというものを作ってみましたが、先人がもっと洗練されたツールを作っているだろうと思い調べてみたところ、フリーソフトでGPSBabelというツールを発見しました。

GPSBabel公式ホームページ からダウンロードできます。Windows, MaxOS, Linux版があり、Linux版を使いました。Linux版はgpsbabel, gpsbabel-guiとDebianパッケージがあります。以下、gpsbabel 1.8.0+ds-4+b1 というバージョンでのサンプルです。

とりあえずコマンドラインから使ってみます。形式変換だけであればgpsbabel -i 入力形式 -f 入力ファイル名 -o 出力形式 -F 出力ファイル名 とすれば変換してくれます。GPXからGeoJSONに変換するサンプルです。

$ gpsbabel -i gpx -f input.gpx -o geojson -F output.json

GPSデータを間引きするには、フィルターのSimplifyという機能を使います。オプション -x simplify,count=出力したい座標数 または、-x simplify,error=許容誤差 で指定します。

例えば許容誤差10m以内で間引きする場合は下記のコマンドになります。

$ gpsbabel -i gpx -f input.gpx -x simplify,error=0.01k -o geojson -F output.json

GUIフロントエンド

GUIフロントエンドもあります。Linuxの場合はコマンド gpsbabelfe か、アプリランチャから起動できます。

GPSBabel GUIフロントエンド

コマンドより使いやすいですが、先に紹介した simplify フィルタでは count しか指定できず error での指定はできないようです。

間引きを試してみた

先程お見せした万博記念公園〜平城宮跡のGPSログをサンプルとして、simplify フィルタで error の値を変更しポイント数と軌跡がどうなっていくか確かめてみました。

error ポイント数
オリジナル 7874
0.001k 2077
0.005k 429
0.01k 260
0.03k 112

errorの単位はキロメートルなので、0.001kだと誤差1mですがこれでもデータ量は1/4程度になります。0.03k(30m)では112点まで間引くことができます。

では実際にどんな軌跡になるのか見ていきましょう。

オリジナル(7874点)

間引きによる差がわかりやすい場所で比較するため、急なカーブがある所を拡大してみました。まずはオリジナル。GPSサイコン XOSS は1秒毎のデータになっているようでまあ、こんなものでしょう。

オリジナル(7874点)マップに表示

0.001k(2077点)

0.001k(2077点)マップに表示

ほとんど違いがわかりませんね。ただ、2077点はまだまだ多くもっと間引きたいです。

0.005k(429点)

0.005k(429点)マップに表示

ちょっと粗くなりました。ここまで拡大することはほとんどないでしょうからブログ埋め込み用途としては全く問題ないレベルです。

0.01k(260点)

0.01k(260点)マップに表示

かなり直線になりましたね。90°カーブは2点だけで斜め直線で繋がれています。これくらいであれば実用上問題ないかなと思います。

0.03k(112点)

0.03k(112点)マップに表示

100点くらいになると、記事作成画面で直接コピペしてもあまり気にならないレベルまで間引きできましたが、さすがにカクカクで道から外れています。ちょっとやり過ぎました。

まとめ

GPSBabelで簡単にGPS軌跡データを間引いてシンプルにすることができました。サイクリングの記録をブログにアップする用途としては0.005k〜0.01k(誤差5〜10m)くらいで間引きするのが良さそうです。

関連記事

Blog Archive

QooQ