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が扱えればいいのに、その腕がない。一応、ひと区切り。

2017年8月17日木曜日

サイクリング行程表を折本で

行程表を折本に

ブルベする方が使うようなキューシートの、うん、と簡素化したやつを、 A4横 で作り、2ページ1枚で印刷、ふたつ折りにして、 でフロントバッグのマップケースに入れて走ることが有る。
特に、半日以上、初めての場所へ出かける場合に作ることがある。 まあ、体力に自信がないので、 休息ポイント等を予め把握しておくことが目的。 表の作成が結構面倒なのでサボることが多いが。
この表だが、マップケースに入ってると、 紙の入れ替えが結構面倒に感じる。
で、1) 折本化、2) A5クリアファイル にしてみた。
クリアファイルはマジックテープ止め。

折本とは

A4の紙に切れ目を入れて、A7の冊子にするというもの。見開きで、A6になる。
検索すればたくさん出てくるが、例えば、以下。
こいつを、見開きで見ることを前提に作れば、 それなりに表が読めそう。

印刷のレイアウト

行程表をA5横で作成したものを、pdfで出力し、 pdfshufflerとかでページの回転と、空ページの挿入をする。


4ページ1枚のレイアウトにするので、4ページでひと組。
1,2は180度回転、3は空ページを挿入、4はそのまま 1,2はそのまま、3は空ページを挿入、4は180度回転(この方が、めくりやすい)。
空ページは、空白pdfファイルをlibreofficeとかで作っておいて、追加する。
これを印刷して、折本の作り方を参考に、切込みを入れて折りあげれば良い。 印刷の設定は以下。
を、やめて、
にする。

折った後、必要に応じて、糊で貼り合わせれば出来上がり。 まあ、使い捨てなんで、カッターできれいに切るより、 2つ折りの状態をハサミでチョキチョキするのが簡単でいい(精度悪いけど)。

使用した感想

まだ一度の使用だけだが、感想。
  • 冊子が小さいので、ページをめくる回数が増える。
  • ファスナが開いていれば、ゆっくり走行で、手を入れてめくれる。(安全と腕しだい)
  • フルフィンガーのグローブではムズいだろう。
  • 冊子をずらせるので、下が見える。
  • クリアファイルのファスナーに引手がほしい。
  • マジックテープ止めでいけそう。長期間使えるかは別。

キューシート(行程表)の作り方

ルートのGPXファイルが既にある場合です。 流れは、
  1. GPXファイルを用意する。
  2. VikingRouteConverter で読み込む
  3. シートに含めたいトラックポイントに名前を付ける。 Vikingなら name、RouteConverter なら  Description (中身はname)  になる。地図で確認しながら変更できる。下は RouteConverter。 カシミール3Dでもできるのかなあ。

  4. gpxファイルに書き出して、gpsbabelで csvに変換、awk(ここ)で距離を計算しつつ、 nameに書き込みがあるポイントだけ csvに書き出す。RouteConverterでは、 "Position"がデフォで含まれるので、これが含まれないポイントだけ書き出す。

    $ gpsbabel -t -i gpx -f inp.gpx -o csv -F - | gawk -f ~/bin/cue.awk > cue.csv

    gpsbabel は、どうも標高を書き出してくれないみたいで、残念。

  5. gnumeric等の表計算ソフトで読み込み、雛形にコピペして、調整して終了。
    nameへの書き込みで、半角カンマを入れてしまって、面倒になった。記入は新調に。
少しは楽になったかな。

Emacs の lsp の設定、なう(202310)

前回さらしてから、さらに1年。そう、3年めになる。 が、今回は一段と自信がない。 環境は、 Debian GNU/Linux 12 (bookworm) + emacs(29.1)。consult + company。 embark は未だに使ってない。 用途は、メモ と ...