大圏補間 ― 2点間の中間緯度・経度を無料で計算
(40.7128, -74.006)と(51.5074, -0.1278)を結ぶ大圏の中間点は(52.3684395875, -41.2903073562)で、両端より北にあります。0から1の割合を選べば、ルート上の任意の地点と出発地からの距離が分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 緯度1
- 40.7128
- 経度1
- -74.006
- 緯度2
- 51.5074
- 経度2
- -0.1278
- 割合
- 0.5
- 地球半径 m
- 6,371,000
- 角度距離(度)
- 50.0942115601
- 総距離 m
- 5,570,222.17974
- 始点からの距離 m
- 2,785,111.08987
大圏補間は、シンプルな航海の問いに答えます。2つの固定された緯度・経度の端点と0から1までの割合が与えられたとき、両者を結ぶ最短の球面弧に沿ってその割合だけ進んだ中間点はどこにあるでしょうか。緯度と経度をそれぞれ独立に線形合成するのは誤りです。子午線は収束し、経度は一周するからです。正しい構成では地球を球として扱い、各端点を単位ベクトルに変換し、球面線形補間(slerp)を行います。これにより、すべての中間サンプルが2点を通る一意の大圏上に乗ります。割合0は始点を、割合1は終点を、0.5は測地中点を返します。
大圏の中間点はどう計算されるか
両端点を十進度からラジアンに変換し、球面上の単位ベクトルn1とn2を作ります。両者の中心角δは球面余弦定理から得られます。cos δはsin φ1 sin φ2にcos φ1 cos φ2 cos(λ2 − λ1)を加えたもので、逆余弦の前に−1から1の範囲にクランプし、浮動小数点の誤差が定義域を外れないようにします。
sin δが実質0で2点が一致する場合、どの割合でも始点の座標を返します。Aはsin((1−f)δ)/sin δ、Bはsin(fδ)/sin δです。中間の単位ベクトルはA·n1+B·n2で、緯度は水平斜辺に対するzの逆正接、経度はyとxの2引数の逆正接を求め、日付変更線の反対側の半開区間に折りたたみます。
パイプライン全体は決定的な浮動小数点演算で、乱数シードも時刻もネットワーク呼び出しもモデルのドリフトもありません。
大圏補間が実務で登場する場面
航空・海事の訓練では、大圏航路に沿った中間位置の問題がたびたび出題され、受講者には割合fでのlat/lonをチャート用ディバイダなしで返す信頼できるオラクルが必要です。GISや物流のチームは、本格的な楕円体ライブラリを導入する前に、長い飛行区間や航海区間を等間隔のサンプルに細分化し、ヒートマップや燃料推定、ジオフェンスのコリドーに活用します。
捜索救難の計画、ハイキングガイド、オリエンテーリングの教材では、既知の2地点間の計画弧に沿って割合でチェックポイントを配置します。ゲームやシミュレーションのエンジンは、同じ閉形式を使って球面経路に沿ってエンティティを動かすため、重い測地パッケージを同梱しなくてもクライアントとサーバーの整合が保てます。
Web地図にアニメーションする弧を作る地図制作者は、平面投影で地球を突き抜けない滑らかな測地ポリラインを描くため、一定の割合で中間点をサンプリングします。オフラインのワークシートとオンラインの自動採点の一貫性を保つためです。
後日、方位と距離から目的地を求める直接問題、等角航法、対蹠点の座標、WGS84楕円体上の完全なVincenty測地線が必要になった場合は、この大圏補間ページに載せるのではなく、別の検索意図とランディングページとして扱ってください。
活用例
航海訓練と航路中間の位置特定
大圏区間に沿った割合fでの中間のlat/lonを計算し、教官と自動採点が大海原や上空の訓練で同一の基準値を共有できます。
航空・海運ルートの細分化
完全な楕円体スタックなしで、出発地と目的地の間の等間隔のwaypointをサンプリングし、地図、燃料モデル、コリドーのジオフェンスに使えます。
よくある質問
この大圏補間はどんな式を使いますか?
球面線形補間(slerp)です。中心角δは球面余弦定理から求め、重みはA = sin((1−f)δ)/sin δとB = sin(fδ)/sin δ、中間の単位ベクトルはA·n1 + B·n2で、その後φとλをatan2で求めます。
割合が0から1の範囲外だとどうなりますか?
割合は閉区間[0, 1]内になければなりません。範囲外の値は折り返しもクランプもされません。
緯度と経度の線形平均は正しいですか?
いいえ。 緯度と経度を独立に平均すると、球面幾何と経度の一周を無視することになります。このツールは単位球上で補間するため、すべてのサンプルが大圏弧の上に乗ります。
端点が対蹠点の場合は?
2点が球面上で正反対(またはほぼ正反対)にある場合、両者を結ぶ大圏は無限に存在します。
料金はいくらですか?
ブラウザのツールは無料でローカルで動作します。無効な入力は課金されません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/geodesic-interpolate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lat1":40.7128,"lon1":-74.006,"lat2":51.5074,"lon2":-0.1278,"fraction":0.5}'const res = await fetch("https://api.kit.forhosting.com/geo/geodesic-interpolate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lat1": 40.7128,
"lon1": -74.006,
"lat2": 51.5074,
"lon2": -0.1278,
"fraction": 0.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/geodesic-interpolate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lat1": 40.7128,
"lon1": -74.006,
"lat2": 51.5074,
"lon2": -0.1278,
"fraction": 0.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/geodesic-interpolate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lat1":40.7128,"lon1":-74.006,"lat2":51.5074,"lon2":-0.1278,"fraction":0.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lat1":40.7128,"lon1":-74.006,"lat2":51.5074,"lon2":-0.1278,"fraction":0.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/geodesic-interpolate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"lat1": 40.7128,
"lon1": -74.006,
"lat2": 51.5074,
"lon2": -0.1278,
"fraction": 0.5
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.geodesic_interpolate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
閉じた単位区間の外の値は、折り返したり区間外の点を捏造したりせず、明確なinvalid_inputエラーで拒否されます。
大圏の中間点はどう計算されるか
2点が対蹠点の場合もsin δは0ですが、大圏の平面が一意に定まらないため、リクエストは任意の経路を黙って選ぶのではなくinvalid_inputで失敗します。それ以外では、古典的なslerpの重みを計算します。したがって同一の入力は常に同一のJSONを生成し、自動テストや解答キーにそのまま使えます。
送信するものと返ってくるもの
緯度は北を正として−90度から90度の閉区間になければなりません。経度は東を正として−180度から180度の閉区間になければなりません。便宜上、latitude1、longitude1、latitude2、longitude2、fという任意の別名も受け付けます。既定値は慣例的な地球平均半径の637万1000メートルです。代表的な確認例は、大西洋の中間サンプルを得るニューヨーク―ロンドン間の割合0.5、赤道の4等分点、正確な端点を返す割合0や1です。lat1、lon1、lat2、lon2、fractionの各フィールドに、必須の有限の数値を5つ送信します。割合は0から1までの閉区間(両端を含む)になければならず、その範囲を厳密に外れる値はinvalid_inputで失敗し、課金されません。弧長を報告する場合は、有限の正の球半径としてearth_radius_mも渡せます。単位球上の中間の緯度・経度は半径に依存しませんが、total_distance_mとdistance_from_start_mは半径に比例します。成功時の応答には、整形済みの端点と割合、端点の角度距離(度)、全弧長と始点からの距離(メートル)、latitudeとlongitudeを持つintermediateオブジェクト、簡易クライアント向けの平坦なintermediate_latitude・intermediate_longitudeフィールド、メソッドタグgreat_circle_slerp、ドキュメント用のコンパクトな式文字列が含まれます。成功したAPI呼び出しの料金は公開されている基本単価の1件$0.002で、検証失敗ではプリペイド残高は消費されません。
大圏補間が実務で登場する場面
この機能は純粋なparseエンジンなので、API料金は公開基本単価の成功1件あたり$0.002で、検証失敗は残高を消費しません。
連携の活用例
アニメーションする測地弧とシミュレーション
割合を0から1まで進めて、ブラウザとAPIで同一の結果を得ながら、地図アニメーションやゲームのエンティティを球面経路に沿って動かします。