FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

torifo/vertcut-cli: GPX/位置ログから獲得標高・勾配・ラップ・SVG標高プロファイルを生成する単一バイナリCLI (Zig) · GitHub

Latest commit

 

History

28 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

日本語English

vertcut — 自分の GPS トラックを手元で解析する CLI

記録した GPS トラック(GPX)から、獲得標高・勾配・ラップ・標高プロファイル SVG を、 クラウドに上げず・スクリプトから・図として取り出す単一バイナリの CLI。reachtrail の派生だが、 アプリではなく、スクリプトから使える解析ツールという別の立ち位置。依存ゼロ・ネットワークアクセスなし。

↑ この図は vertcut 自身が生成(vertcut docs/sample.gpx --profile docs/sample-profile.svg)。外部依存ゼロの自己完結 SVG。

# 自分のトラックを、上げずに、その場で数値化
vertcut ride.gpx

# JSON で取り出してパイプ(自作の集計・ダッシュボード・メモへ)
vertcut ride.gpx --json | jq '{gain_m, grade_max}'

# 記事や README にそのまま貼れる、依存ゼロの SVG プロファイル
vertcut ride.gpx --profile profile.svg

なぜ vertcut(Strava / Garmin と何が違う)

統計を「見る」だけなら Strava / Garmin で十分。vertcut が埋めるのは、その外側

  • 🔒 オフライン・無アップロード — 手元で完結。ネットワークアクセスは一切なし。
  • 🧰 スクリプタブル — --json で全統計、stdin / 複数入力、パイプで自分のワークフローへ。
  • 🖼 埋め込める — 外部依存ゼロの自己完結 SVG を、記事や README にそのまま。
  • 📦 依存ゼロの単一バイナリ — Zig 製、ランタイム不要。

対象は「自分の GPX を、手元で・スクリプトで・図として扱いたい人」。 地名は受け取らない(入力は記録済みの GPX ファイル)。地図は描かず、標高プロファイルに専念する。

GPX ファイルを持っていない?

.gpx は、GPS ウォッチやアプリがラン・ライド・ハイクの記録を保存する標準形式(緯度・経度・標高・時刻)。 そうしたデータは Strava / Garmin / Komoot の中にすでにあり、エクスポートするだけで手に入る:

  • Strava — アクティビティを開く → ⋯ メニュー → GPX をエクスポート
  • Garmin Connect — アクティビティを開く → 歯車アイコン → GPX 形式でエクスポート
  • Komoot / Ride with GPS / AllTrails — ツアー/ルートを開く → エクスポート / ダウンロード → GPX
  • 記録がまだない → 上記サイトでルートを計画して GPX をダウンロード(ウォッチ不要)

ウォッチは .fit で保存することも多い。上記アプリからエクスポートして .gpx を入手する。 試すだけなら、インストール不要のブラウザデモに GPX をドラッグ&ドロップ(無アップロード): https://torifo.github.io/vertcut-cli/

インストール

# ソースからビルド(Zig 0.16 以降)
git clone https://github.com/torifo/vertcut-cli && cd vertcut-cli
zig build -Doptimize=ReleaseFast      # → zig-out/bin/vertcut

リリースバイナリ / Homebrew は準備中。

引数なしで実行すると、組み込みサンプルでデモ出力と使い方を表示する:

vertcut          # デモ + 案内
vertcut --help   # 全オプション

使い方

サマリ表(既定)

vertcut ride.gpx
vertcut · ride.gpx
────────────────────────────────────────────
Points     1,284 trackpoints
Distance   42.20 km  (42,195 m)
Climb      ↑ 631 m gain   ↓ 624 m loss   (net +7 m)
Elevation  12–138 m  (range 126 m)
Duration   02:11:30   ·   avg 19.3 km/h
Grade      avg 0.1 %   ·   max +9.4 %  (steepest climb)
Steep      4.8 % of distance steeper than 10 %
────────────────────────────────────────────
gain/loss smoothed with a 3 m threshold

各数値には単位・意味・適用中の閾値まで添えてあり、見ただけで分かる。--threshold <m>(平滑化)/ --steep <%>(急勾配判定)で挙動を変えられる。

JSON で取り出す(機械可読)

vertcut ride.gpx --json | jq '{gain_m, grade_max, steep_pct}'
vertcut tracks/*.gpx --json | jq -s 'map(.gain_m) | add'   # 月次の総獲得標高

SVG 標高プロファイル

vertcut ride.gpx --profile profile.svg

自己完結(外部フォント / スクリプト / 画像なし)なので、<img src="profile.svg"> で貼るだけ。

ラップ分割

vertcut ride.gpx --laps 1km     # 距離で分割(500m なども可)
vertcut ride.gpx --laps 10min   # 時間で分割(30s なども可)

stdin / 複数入力

cat ride.gpx | vertcut -        # stdin から読む
vertcut a.gpx b.gpx c.gpx       # ファイルごとに結果を出力

JSON 出力フィールド(契約)

フィールド 意味
point_count int トラックポイント数
distance_m float 総距離(m)
gain_m / loss_m float 獲得 / 損失標高(m、閾値ヒステリシス適用後)
ele_min / ele_max float | null 最低 / 最高標高(m)
elapsed_s int | null 経過時間(秒、タイムスタンプがあれば)
grade_avg float 平均勾配(%)
grade_max float 最大勾配(%、最急登坂=符号付き最大)
steep_pct float 急勾配が占める距離割合(%)
laps[] array {index, distance_m, gain_m, duration_s}

仕組み・精度

  • 獲得標高: GPS ジッタを閾値ヒステリシス(既定 3 m)で除去し、標高を水増ししない。
  • 最大勾配: 最急の登坂(符号付き最大)。急な下りを「最大勾配」と取り違えない。
  • 精度ゲート: 手作業で検証した基準トラックで、獲得標高が 1% 以内に収まることをテストで保証。
  • 性能: 50,000 点の GPX を ReleaseFast ビルドで 約 20 ms で解析。

スコープ

v1 の入力は GPX のみ(FIT / TCX は対象外)。完全オフライン・依存ゼロ・地図描画なし。

開発

zig build                     # ビルド
zig build test --summary all  # 全テスト(35 件)

テストは haversine 距離・標高ヒステリシス・勾配 / ラップ・GPX パース・JSON / SVG 出力に加え、 基準トラックで獲得標高が 1% 以内に収まる精度ゲートと、最大勾配の符号回帰を含む。

スタック

  • 言語: Zig 0.16(標準ライブラリのみ・サードパーティ依存なし)
  • パーサ: 寛容な GPX プルパーサ(未知のタグ / 属性を許容)
  • 配布: 単一の静的バイナリ(macOS arm64 / x86_64・Linux x86_64)

About

GPX/位置ログから獲得標高・勾配・ラップ・SVG標高プロファイルを生成する単一バイナリCLI (Zig)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages


Back | FazBrowse Home | New Git URL