風に最適な滑走路計算
この計算機は、報告された1つの風に対して、利用可能な各滑走路方向を比較します。各候補の符号付き横風、横風の絶対値、向かい風、追い風を計算し、明確な順位を返します。最初に横風の絶対値が最小の方向を優先し、同値なら向かい風が強い方向を上位にします。使用できる方向は、必要に応じて反対側の滑走路端も含めて個別に入力してください。風速は普段お使いの単位で入力でき、すべての成分も同じ単位で返されます。
無料で実行
風と滑走路方向の基準を統一してください
風向は気象上の慣例に従い、風が吹いてくる方角を真北から時計回りの度数で入力します。したがって、270度の風は西から吹きます。各滑走路端の方位は、その端から進む方向を真北基準で入力してください。同じ舗装面の両端が使用可能な場合も、向かい風成分の符号が反対になるため、別々の候補として登録します。たとえば滑走路09と27は同じ舗装面を共有していても、運用上は異なる方向です。風速にはノット、メートル毎秒、マイル毎時など、一貫した単位を使用できます。この計算機は単位換算を行わず、各風成分を入力と同じ単位で返します。方位0度と360度はいずれも北を示し、出力では0度に正規化されます。精度が必要な場合は、滑走路番号から推測した丸め値ではなく、公示または測量された実方位をご使用ください。
風成分の計算方法と順位をご確認ください
各滑走路方向について、計算機は滑走路方位と風が来る方向との間の、符号付き最短角度を求めます。次に三角法を使い、風速を互いに直交する2つの成分へ分解します。余弦による成分は、正なら向かい風、負なら追い風です。正弦による成分は符号付き横風で、その絶対値は左右を区別しない横風の強さを表します。順位は、まず横風絶対値の小さい順です。同値の場合は向かい風成分が大きい方向を優先するため、同じ強さなら追い風より向かい風が上位になります。完全に同値なら入力順を維持し、常に再現可能な結果にします。符号付き角度と横風成分は反対側からの風を区別する助けになりますが、その符号は数学上の規約であり、運航許可を意味しません。必ず航空機と飛行場に適用される手順に照らして数値をご判断ください。
結果は許可ではなく比較資料としてお使いください
推奨滑走路は計算上の順位で最初の候補にすぎず、離着陸の指示ではありません。実際の選択には、公示制限、滑走路の長さ・状態・勾配、障害物、交通流、計器進入、騒音手順、閉鎖、制動状態、突風、風の変動、航空交通管制などが関係します。風成分が有利でも、これらの条件に優先することはありません。入力する候補が実際に利用可能であること、風向と滑走路方位が同じ北基準であることをご確認ください。磁北と真北を混在させると不要な角度誤差が生じます。通報に平均風と突風がある場合は、適用手順で厳しい値が求められることがあるため、別々に計算すると有用です。全候補の順位は、計画、教育、運航準備、整合性確認に役立ちます。API の決定論的な比較は1回 $0.002 で、ブラウザー版も同じ計算を端末内で行います。
活用例
反対方向の滑走路端を比較
同じ横風の強さが、どちらの方向で向かい風となり、追い風を避けられるか確認できます。
空港の複数滑走路を確認
運用上の制約を適用する前に、1つの風通報で利用可能な全方向を順位付けできます。
風成分の教育に活用
方位によって横風の符号と強さ、向かい風、追い風がどう変わるか示せます。
よくある質問
方向にはどの規約を使いますか?
風向は風が来る方向、滑走路方位は進行方向です。どちらも真北から時計回りの度数で指定します。
最適な滑走路はどう選びますか?
横風の絶対値が最小の候補を優先し、同値なら向かい風成分が最大の候補を上位にします。
向かい風成分が負の場合は何を示しますか?
追い風を示します。その正の強さも tailwind_component フィールドに出力します。
風速にはどの単位を使えますか?
一貫した単位なら使用できます。返される全成分は、入力した風速と同じ単位です。
反対側の滑走路端は別々に入力しますか?
はい。反対方位では向かい風と追い風が逆転し、横風の符号も変わるため、各方向を個別に入力します。
結果だけで使用滑走路を決められますか?
いいえ。比較対象は風成分のみです。利用可否、制限、状態、手順、航空交通管制が優先されます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/travel/best-runway-for-wind \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"wind_speed":18,"wind_direction_deg":250,"runways":[{"name":"09","heading_deg":90},{"name":"18","heading_deg":180},{"name":"27","heading_deg":270}]}'const res = await fetch("https://api.kit.forhosting.com/travel/best-runway-for-wind", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"wind_speed": 18,
"wind_direction_deg": 250,
"runways": [
{
"name": "09",
"heading_deg": 90
},
{
"name": "18",
"heading_deg": 180
},
{
"name": "27",
"heading_deg": 270
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/best-runway-for-wind",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"wind_speed": 18,
"wind_direction_deg": 250,
"runways": [
{
"name": "09",
"heading_deg": 90
},
{
"name": "18",
"heading_deg": 180
},
{
"name": "27",
"heading_deg": 270
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/best-runway-for-wind", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"wind_speed":18,"wind_direction_deg":250,"runways":[{"name":"09","heading_deg":90},{"name":"18","heading_deg":180},{"name":"27","heading_deg":270}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"wind_speed":18,"wind_direction_deg":250,"runways":[{"name":"09","heading_deg":90},{"name":"18","heading_deg":180},{"name":"27","heading_deg":270}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/best-runway-for-wind", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"wind_speed": 18,
"wind_direction_deg": 250,
"runways": [
{
"name": "09",
"heading_deg": 90
},
{
"name": "18",
"heading_deg": 180
},
{
"name": "27",
"heading_deg": 270
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.best_runway_for_wind",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_runways | 100 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |