傾斜補正ランニングペース計算
傾斜補正ペース(GAP)は、一定の上り坂や下り坂を走ったときとほぼ同じエネルギーを要する平地ペースを推定します。1km当たりの秒数と、上りを正、下りを負にした勾配率をご入力ください。公開済みの走行コスト多項式を用い、平地相当ペース、補正係数、モデル上のエネルギーコストを返します。比較に役立つ決定論的な推定ですが、心拍数、パワー、路面、天候、個人差の代わりにはなりません。
無料で実行
ペースと勾配を一貫して入力します
観測ペースは1km当たりの合計秒数でご入力ください。5分なら300秒です。勾配は符号付き高低差を水平距離で割り100倍した値で、100mで5m上る場合は約+5%です。下りは負数にします。平均勾配は均一な区間だけにお使いください。起伏が激しいコースは区間に分け、時間または距離で結果をまとめます。平均0%では登坂コストを隠す場合があります。短区間のGPS標高は不安定なため、地図由来または平滑化した勾配が適しています。範囲は−45%から+45%、ペースは1km当たり1分から60分です。
多項式補正を理解します
Minetti曲線は、コスト = 155.4g⁵ − 30.4g⁴ − 43.3g³ + 46.3g² + 19.5g + 3.6です。gは小数表記の勾配です。0%では3.6ジュール毎キログラム毎メートルとなります。平地コストを指定勾配のコストで割った係数を観測秒数に掛けます。下りは制動、衝撃、筋損傷があるため上りの鏡像ではありません。返される値はカロリーの直接測定ではなく、多項式の値です。最後に丸めるため再現性があります。これはモデル上のエネルギー等価性であり、競技場で同じペースを出せる保証ではありません。
GAPを比較指標として解釈します
生ペースでは誤解しやすい区間の比較にGAPをご利用ください。遅い上りは強い努力を、速い下りは見かけほど大きくない負荷を示すことがあります。路面、標高、風、疲労、距離が近いほど有用です。技術的な路面、曲がり角、階段、泥、暑さ、難しい下りは式に含まれません。個人の走効率も異なります。小差はノイズとして扱い、元データも保存してください。ブラウザーとAPIは同じ純粋なJavaScriptソルバーを使い、APIは1件$0.002です。主観的運動強度、心拍数、練習目的も併せてご判断ください。
活用例
坂道インターバルの比較
一定勾配の各反復を平地相当ペースへ換算してから運動強度を比較します。
レース区間タイムの確認
元データを残したまま、上りが遅く下りが速くなる理由を把握します。
練習記録の標準化
決定論的なGAP値を追加し、類似セッションを共通尺度で確認します。
よくある質問
利用料金はいくらですか?
APIは1リクエスト$0.002です。ブラウザー計算も同じソルバーを使用します。
下り勾配は負数ですか?
はい。下りは負の割合、上りは正の割合でご入力ください。
なぜ1km当たりの秒数で入力しますか?
APIの数値単位を明確にするためです。分を60倍し、残りの秒を加えてください。
GAPは実際の平地レースペースを予測しますか?
いいえ。体力、路面、風、標高、疲労も結果に影響します。
起伏コースに平均勾配を使えますか?
慎重にお使いください。コストが非対称なため、上りと下りを別々に計算する方が適切です。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/health/grade-adjusted-pace \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pace_seconds_per_km":300,"grade_percent":5}'const res = await fetch("https://api.kit.forhosting.com/health/grade-adjusted-pace", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pace_seconds_per_km": 300,
"grade_percent": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/grade-adjusted-pace",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pace_seconds_per_km": 300,
"grade_percent": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/grade-adjusted-pace", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pace_seconds_per_km":300,"grade_percent":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pace_seconds_per_km":300,"grade_percent":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/grade-adjusted-pace", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"pace_seconds_per_km": 300,
"grade_percent": 5
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.grade_adjusted_pace",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
min_pace_seconds_per_km | 60 |
max_pace_seconds_per_km | 3600 |
min_grade_percent | -45 |
max_grade_percent | 45 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |