2017年8月22日火曜日

GPXファイルからキューシート用のCSVを作る

GPXファイルをもっと使えないか

サイクリングにキューシートのような行程表を持っていくことがある。 その作成はというと、GPXファイルが有るのに、 コピペとか手入力とか、なかなか面倒な作業になる。 ググってみても、良い方法に出くわさない。

ありました。こちらで丁寧に説明されています。 無料アカウントで、キューのcsvファイルがゲット出来ます。csvがあれば、あとはなんとかなります。

そこで、gpxのトラックデータには、 GPX 1.1 Schema Documentation にもあるように、[name]の項目があるので、 地図上にgpxファイルを表示させながら、 この項目に、〇〇庵とか、右折直進、とか記入できれば、 吐き出すgpxファイルをもっと有効に使いまわせるのではないかと考えた。 ルートではなく、トラックです。
まあ、 通常使っているVikingでは、 トラックの各ポイントに名前や標高をセットできるので、 こいつを使えればと思ったわけ。

トラックポイントに、[name]を加えて使う

手作業でつくる

編集できればなんでもいいが、 私は通常、Vikingを使っているので、こいつがメイン。
ただ、Vikingでは、トラックのポイント名が地図上に表示されないし、 1点づつしか表示・編集できないので、今ひとつの使いゴゴ地。 カシミール3Dは出来たような気がする(今使ってないんで)。
カシミールでは、ルートデータなら編集できるが、 トラックデータは扱えないみたい。ルートデータを編集して トラックデータに変換、書き出しで、 nameは飛んでしまう。トラックはあくまで記録としての扱いみたい。
で、Debianでも使える、RouteConverterというのも使ってみた。 Gitではここ
GPXファイルを、ルート検索サイト等で作成、ダウンロードする。当然、トラックデータ。 こいつを編集する。
  • Vikingの場合。
    1. GPXファイルを読み込み、トラックポイントの編集機能で、 [name]を編集する。
    2. 必要なら、トラックポイントの追加、位置修正を行う。
    3. 追加する場合は、標高データを、前後を参考に設定しておくとよい。
    4. GPXファイをエキスポートする。
  • RouteConverter の場合。一覧をざっと確認するのに向いている。
    1. GPXファイルを読み込み、編集機能でDescriptionの内容を修正する。
    2. 必要なら、トラックポイントの追加、位置修正を行う。
    3. 修正後、ファイルセーブで保存する。
    4. [name]がないポイントには、 読み込み時に Position + 番号 が入る。 (オプションで変更できる)
RouteConverterの編集画面。標高データが欠落している部分は、寄り道を追加した部分。
もともと、こんなファイルだったのを、
こんなファイルにする。

[name]付きGPXファイルをcsvに

gxpファイルの変換にはgpsbabelを良く使うようで、 やってみたが、[name]は問題なく変換できるが、 標高が扱えないようで悔しい(マニュアルが読めてないだけかもしれない)。
で、他の方法を探すと、pythonのパッケージに、 GitHub - tkrajina/gpxpy: があるのを 見つけが、pythonは関数電卓程度にしか使えないので、どうすりゃ使えるのか解らない。 で、サンプルコードを探した。
あった。ありがたい。ライアン?さん、ありがとう。
ネットで調べながらいじくりまわして、一応動くようになった。pandasとnumpyも必要。 GUI、エラー処理など、一切なし。
$ python ~/bin/conv_gpx_to_cue.py data.gpx
[name]を加えたgpxファイルから、 <ポイント番号、始点からの路線距離、標高、累積標高の正負、[name] >を、 csv形式で、全点と[name]に「Position」を含まない点との2種類を吐き出すようにした。 距離は二次元で計算。標高データはそもそも目安程度。出力したcsvはこんな感じ
表計算ソフトに入れて、こんな感じ。
一応、スクリプトを ranger に登録した。
間違えてれば、出先で痛い目にあうかもしれない。 でも、まあよかった、かな。

20170827追加

RideWithGPSのgpxファイルを使う

RideWithGPSのフリーアカウントで、 ルートのトラックデータと、キューの内容で作成されたルートデータがダウンロードできる。 いずれのファイルも、gpx形式で、座標が含まれるので、 こいつらを使って、上と同じことが出来るようにしてみた。
キューにリストされたポイント座標を、トラックデータの中で最も近い点を選んで、キューの記述内容を当て込んで、 csvgpxのルート形式で書き出すというもの。
やってみて分かったが、ダウンロードした座標データが丸め値みたいで、キューの点が近接していると判定できずに、トラックの複数点に対応することがある。 RideWithGPSのサイトである程度のキューの内容を調整する作業が必要みたい。
あと、自転車道をルート検索に含める場合、OSMの地図をベースにする必要がある。googleベースで編集すると、設定したルートが変わることがある。

BikeRouteToasterのファイルを使う

BikeRouteToasterでも、 ルートのトラックデータと、キューの内容で作成されたトラックデータとしてがダウンロードできる。ただし、キューはtcxとcsvだけで、gpxはサポートされていない。 このサイトがよいのは、ルート検索機能をオフにして(というか、私の環境ではルート検索ができない)、ルートの編集が出来る所。RideWithGPSからダウンロードしたtcxファイルを読み込んで、googleの地図を背景に修正作業ができる。

Plotarouteは止めておく

plotaroute も RideWithGPSと同様の作業が可能だが、キューへの対応が良くないようだ。Noteとして画面にリスト表示されるが、ダウンロードしたファイルと整合性が取れていない場合があった。今回は除外。


キュー関係は以外は、好きかも。

結局どうしたのか

ルート検索サイトからダウンロードしたデータを使って、ポイント番号、路線距離、標高、獲得標高、座標、キューを含むCSVファイルを、全点と、キューのある点のみの2種類作成するようにした。以下の三種類に対応させた。
  1. Ride with GPSの、ルートのデータ(Export の GPX Track (.gpx))と、キューのデータ(Export の GPX Route (.gpx))から、csvファイルを作成
  2. Bike route Toasterの、 ルートのデータ(Export の GPX) と、 キューのデータ(Export の csv)から、 csvファイルを作成
  3.  Viking や RouteConverter で加工したデータ。 Export したname付きのgpxファイルから、csvファイルを作成

$ python ~/bin/Convert_from_gpx_to_csv_with_other_data.py 名前.gpx

tcxが扱えればいいのに、その腕がない。一応、ひと区切り。

0 件のコメント:

コメントを投稿

麻のボディタオル

2018年の秋(まだ、自転車を封印してない)、 近江上布伝統産業会館 で、興味からボディタオルを購入した。 お、よかった。: 自然派パン工房 ふるさとの道 ほぼ毎日風呂で使ってきて、ついに寿命がきたようだ。 お店の方に、「糸が痩せて破れてくる」まで使える、と...