半径から緯度経度のバウンディングボックスを計算
51.5074, −0.1278を中心とする半径1000 mのバッファーは、それを囲む最小の長方形の緯度と経度の4つの限界値になります。日付変更線と極の場合を示す印も付きます。正確な距離判定の前の素早い絞り込みに使えます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 緯度
- 51.5074
- 経度
- -0.1278
- 半径 (m)
- 1,000
- 最小緯度
- 51.4984067964
- 最小経度
- -0.1422489201
- 最大緯度
- 51.5163932036
- 最大経度
- -0.1133510799
この計算ツールは、中心の緯度・経度とメートル単位の半径から、球形地球上の円形バッファー全体を囲む最小の緯度経度矩形を求めます。最小・最大座標に加え、日付変更線の横断と全経度の包含を示すフラグも返します。データベース、地図サービス、空間インデックスで精密な距離判定を行う前に、高速な矩形フィルターで候補を絞り込む用途に適しています。
中心点と半径を明確な単位で入力します
緯度は -90 から 90、経度は -180 から 180 の範囲である必要があり、半径に負の値は指定できません。半径がゼロの場合も有効で、4つの境界が元の地点と一致する縮退ボックスを返します。計算には IUGG の平均地球半径 6,371,008.8 メートルを使用します。
これは検索範囲、地図プレビュー、データベースの事前絞り込みに適した実用的な球体モデルです。ただし、測量精度の境界として扱うものではありません。指定モデル上の円形領域を確実に包含することが目的です。
処理全体で同じ座標基準を使用し、メートル欄にキロメートル、マイル、度を入力しないでください。
通常結果と日付変更線を越える結果を読み取ります
通常の結果では各最小値が対応する最大値より小さいため、そのまま範囲検索に利用できます。180度付近の経度には特別な扱いが必要です。値を並べ替えると、狭い対象領域ではなく広大な反対側を選択してしまいます。
緯度は1つの通常範囲のままです。確実な近傍検索では、まずこの矩形で候補を絞り、その後に大円距離を計算してください。矩形の角は円の外側にある場合があります。
極点を含むバッファーと全球規模の半径を処理します
どちらかの極点に達するバッファーは、狭い経度範囲では表現できません。極点ではすべての子午線が交わるためです。半径が球の円周の半分に達した場合も、同じく全経度を対象にします。
アルゴリズムは決定論的で、ネットワーク、保存データ、時刻に依存しません。再現可能な一括処理、キャッシュキー、テスト、ブラウザー計算に利用できます。境界ボックスは円周を描くポリゴンではなく、効率的な包含矩形です。
活用例
近隣地点検索を事前に絞り込みます
正確な距離計算の前に、インデックスで扱いやすい緯度経度範囲を作り、候補数を減らします。
地図の初期表示範囲を決めます
極点や日付変更線の近くでも、指定地点の周囲半径を含む安全な地理境界を取得します。
地理空間処理を分割します
地点と半径の処理を、キャッシュ、タイル、キュー、空間演算向けの再現可能な矩形範囲へ変換します。
よくある質問
どの地球モデルを使用しますか?
IUGG の平均地球半径 6,371,008.8 メートルを持つ球体モデルで計算します。
ボックス内の全地点が半径内にありますか?
いいえ。 矩形は円形バッファーを包含するため、角は半径外になる場合があります。必要に応じて正確な距離を確認してください。
日付変更線をまたぐ箱はどう検索すればよいですか?
経度を2つの範囲に分けます。最小経度から180まで、そして−180から最大経度までです。またぐ印が付いているときは最小値が最大値より大きいのが正しい状態なので、入れ替えないでください。
バッファーが極に届くとどうなりますか?
すべての経線が極で交わるため、経度は−180と180になり、全経度を覆う印が付きます。その場合は緯度の限界値だけで絞り込み、経度による絞り込みは省いてください。
半径0も入力できますか?
できます。半径0は有効で、4つの限界値が元の地点そのものを示す、大きさのない箱になります。負の半径は受け付けません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/buffer-bbox \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lat":51.5074,"lon":-0.1278,"radius_m":1000}'const res = await fetch("https://api.kit.forhosting.com/geo/buffer-bbox", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lat": 51.5074,
"lon": -0.1278,
"radius_m": 1000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/buffer-bbox",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lat": 51.5074,
"lon": -0.1278,
"radius_m": 1000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/buffer-bbox", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lat":51.5074,"lon":-0.1278,"radius_m":1000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lat":51.5074,"lon":-0.1278,"radius_m":1000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/buffer-bbox", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"lat": 51.5074,
"lon": -0.1278,
"radius_m": 1000
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.buffer_bbox",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
中心点と半径を明確な単位で入力します
中心点は10進数の lat と lon で指定し、radius_m にはメートル単位の半径を入力します。座標は再現可能な JSON と十分な精度を両立するため、小数点以下10桁に丸められます。
通常結果と日付変更線を越える結果を読み取ります
主要な4項目は min_lat、min_lon、max_lat、max_lon です。円形バッファーが日付変更線を越えると、経度は正から負へ折り返し、crosses_antimeridian が true になります。この場合、min_lon が max_lon より大きいのは意図した結果です。min_lon から 180 までと、-180 から max_lon までの2範囲に分けて検索してください。
極点を含むバッファーと全球規模の半径を処理します
そのため緯度範囲が極点に達すると、min_lon は -180、max_lon は 180 となり、covers_all_longitudes が true になります。この場合は範囲を分割しても意味がないため、crosses_antimeridian は false です。covers_all_longitudes が true のときは緯度境界を使用し、経度フィルターを省略してください。この仕様により、極点付近の不安定な除算や、狭すぎる矩形による有効地点の除外を防ぎます。
技術的な質問
1回のリクエスト料金はいくらですか?
API リクエスト1回あたり$0.002です。対応するウェブ画面ではブラウザー内でも計算できます。
min_lon が max_lon より大きい場合があるのはなぜですか?
日付変更線を越えていることを示します。境界を入れ替えず、2つの経度範囲として扱ってください。
バッファーが極点に達するとどうなりますか?
すべての子午線が極点で交わるため、経度は -180 から 180 となり covers_all_longitudes は true になります。