iD エディタで複数の GPS トラックを表示する

時期的にちょうどいい(?)ので OpenStreetMap Advent Calendar 2019の1日目の記事にします()。

正攻法でいくなら GPS の軌跡を osm.org にアップロードしてからエディタの GPS トラックを表示するか、JOSM にドロップするなどの方法がありますが、多くのトラックに自宅付近が記録されているといった理由でアップロードしにくい場合の次善の手を考えました。

長いので要点だけを簡潔に

次のどちらかでできると思います。

  • GDAL ツールか QGIS などで GPX ファイルをマージしてから読み込む
  • GPX ファイルを地図画像タイルに変換してカスタム背景を設定する

QGIS をインストールしておくとどちらの作業できます。

GPX ファイルをマージしてから読み込む

QGIS か GDAL に含まれる ogr2ogr 、GPSBabel を使います。
この方法では異なるトラックを視覚的に認識するのは難しいかもしれません。

QGIS を使った方法

QGIS を起動し、表示したい GPX ファイルを全て QGIS で表示します。
GPX ファイルを読み込もうとすると、 どのように読み込むか聞いてくるので、軌跡を表示したい場合には tracks を選択します。
ポイントとして読み込む場合には track_points を選択してください。

f:id:k-side:20191121125835p:plain
読み込むレイヤの選択

読み込んだらベクタレイヤのマージ機能でマージします。 「ベクタ」→「データ管理ツール」→「ベクタレイヤのマージ」

f:id:k-side:20191121125903p:plain
ベクタレイヤのマージメニューの位置

変換先の座標参照系(CRS) では EPSG:4326 を選択しておきます。
出力レイヤ では右側の「...」をクリックしてファイルに保存 を選択します。ファイルの種類は GeoJSON files(*.geojson) を選択して任意の保存場所に任意の名前で保存します。

f:id:k-side:20191121125949p:plain
ベクタレイヤのマージダイアログ

入力レイヤの指定では右側の「...」をクリックして読み込まれている GPX トラックを選択します。すべてを選択するOK でもいいと思います。

f:id:k-side:20191121130042p:plain
入力レイヤの複数選択

実行 をクリックすると軌跡がマージされたレイヤが表示され、ファイルとしても保存されます。QGIS はプロジェクトの保存をせずに終了して大丈夫です。

iD エディタを開き、GPX ファイルを読み込む時と同じ要領で生成された GeoJSON ファイルを読み込みます。

GPX と似たような表示になると思います。

ogr2ogr コマンドを使った方法

GDAL ツールに含まれる ogr2ogr コマンドを使った方法です。 内容は上記と同じ事をコマンドでやってるだけです。 Windows でも GDAL 単体のインストールができますし、QGISWindows 版に含まれる OSGeo4W Shell から実行することもできます。

Linux だとパッケージ管理システムから gdalgdal-bin などで検索するとインストールできるはずです。

trackA.gpx,trackB.gpx,trackC.gpx をマージするコマンド例です。

ogr2ogr -f GeoJSON tracks.geojson trackA.gpx tracks
ogr2ogr -f GeoJSON tracks.geojson -update -append trackB.gpx tracks
ogr2ogr -f GeoJSON tracks.geojson -update -append trackC.gpx tracks

ogr2ogr で GPX の軌跡(tracks)を GeoJSON の MultiLineString に変換し、tracks.geojson に保存しています。
2つめ以降のコマンドでは GPX の軌跡を tracks.geojson に追加していっています。
使いたい GPX ファイルが大量にある場合には任意のプロンプトで使える for 系コマンドを使うといいと思います。

全部結合できたら QGIS の時と同じように iD エディタで読み込めば OKです。

GPSBabel を使った方法(未実施)

GPSBabel というソフトウェアでも GPX ファイルをマージできるようです。
試していないので情報提供のみ。

メモ帳が至高である(個人的に非推奨)

GPX ファイルの実態は XML ファイルです。 GPX のスキーマを見てみると、軌跡の情報を格納している trk 要素は

<xsd:element name="trk" type="trkType" minOccurs="0" maxOccurs="unbounded">

となっており、maxOccurs="unbounded" ということは複数の軌跡情報を格納することができます。

そこで、GPX ファイルをメモ帳で開き、trk 要素を次々にコピペしていけば複数の軌跡を持った GPX ファイルを作成できます。

Internet Explorer など XML パース機能を持ったソフトウェアで展開してみてエラーが出なければ XML 的には問題ないだろうと思います。

XML の構造が問題なくてもデータ上の問題が起るかもしれないので非推奨にしています。

何らかのプログラミング言語XML として読み込み、 trk 要素を追加していってもいいかもしれません。

GPX ファイルを地図画像タイルに変換してカスタム背景を設定する

この方法のメリットは複数のトラックを視覚的に見やすく分けて表示することが可能ではないかということです。デメリットはとても面倒なこと。

QMeta Tiles プラグインのインストール

まずは使うプラグインのインストールです。 今回は QGIS 3.4 系を使っています。

f:id:k-side:20191130213703j:plain
QMeta Tiles プラグインのインストール

QGIS を起動して必要な GPX ファイルをドロップ

QGIS に GPX ファイルを表示させます。エクスプローラーから QGIS にドロップしてあげれは読み込まれます。
読み込むレイヤはtracks を選択します。

f:id:k-side:20191121125835p:plain
読み込むレイヤの選択

適当に見やすいスタイルに変更する

読み込まれたトラックを自分の見やすいスタイルに変更します。
色を変更する。線種を変更するなどしてトラックを判別できるようにします。

f:id:k-side:20191130213945p:plain
スタイルの編集

QMeta Tiles で TMS 地図画像ファイルを作成

メニューから QMeta Tiles を起動します。

f:id:k-side:20191130214214j:plain
QMeta Tiles プラグインの起動

起動したら出力先や使うズームレベルを設定します。
今回はディレクトリに保存する方法を選択しました。
また、ズームレベルに関してはあまり大きすぎるとファイルシステムのファイル数上限を突破してしまうので気をつける必要があります。

f:id:k-side:20191130214301j:plain
QMeta Tiles のパラメータ

できた地図タイルを適当なウェブホストサービスにアップロードする

FTP の転送ソフトなどを使って自分の自由にできるホスティングサービスなどにアップロードします。
GPS の軌跡に自宅付近や知られたくない場所が多く出てくるなどの事情がある場合には .htaccess などを使って認証をかけるか、アクセス元の制限を行って見られたくない人に見られないようにしておく必要があります。

また、非常に多くのファイルをアップロードすることになるので、ホスティングサービスの制限にも気をつけなければいけません。

iD エディタにある背景画像のカスタム設定でアップロードしたホストとパラメータをセットする

osm.org にアクセスして iD エディタを起動したら背景設定からカスタムを選択します。

f:id:k-side:20191130225005j:plain
カスタムレイヤの設定

地図タイルをアップロードした URL をセットします。 ズームレベルを {z}、その配下のフォルダを {x}, ファイル名を {y}.png として置換えて貼り付けます。

f:id:k-side:20191130225431j:plain
タイルのURLをセット

OK をクリックするとタイルが読み込まれて表示されるはずです。

f:id:k-side:20191130230414j:plain
読み込まれた地図タイル

なお、トラックの存在しない場所を表示するとホスティングサービスへのリクエストが404になって返ってくるので、そうなる前にカスタム背景を除去しておく方がいいと思います。