緯度経度からS2立方体面
地点がS2立方体の6つの面のどれに当たるかが分かります。サンフランシスコ(37.7749, -122.4194)は面4(-Y面)で、uは-0.918061185048、vは-0.635094359374です。S2セルを作る前の最初の一歩で、ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 緯度
- 37.7749
- 経度
- -122.4194
- 面
- 4
- 面の名前
- -Y
- X
- -0.4237560025
- Y
- -0.6672331383
Google の S2 幾何ライブラリは、単位球を立方体へ投影し、各面を再帰的にセル階層へ分割することで地球を格子化します。S2 セル ID の符号化、被覆の計算、領域交差の検討を行う前に、与えられた緯度・経度が立方体の六面のどれに含まれるかを知る必要があります。本機能は WGS84 の緯度と経度を受け取り、単位方向ベクトルへ変換したうえで、S2 面インデックス(0 から 5)、+X や -Z のような読みやすい面名、直交単位成分、そしてその面上の点の UV 座標(慣例どおり −1 から +1)を返します。空間インデックスの構築、球面幾何の教育、あるいは面境界付近の端点で自前の S2 バインディングが参照実装と同じ面を選ぶかの検証に、ぜひご利用ください。
緯度経度が S2 立方体面になる仕組み
WGS84 球上の十進度の緯度と経度から始めます。緯度を赤道からの極角、経度を本初子午線からの方位角として、いずれもラジアンに変換します。単位方向ベクトルは x が cos(緯度) cos(経度)、y が cos(緯度) sin(経度)、z が sin(緯度) となり、正の z は北極、正の x は緯度 0・経度 0 の方向を指します。
S2 立方体の六面は、支配的な直交軸が定める半空間に対応します。面 0 は +X、面 1 は +Y、面 2 は +Z、面 3 は −X、面 4 は −Y、面 5 は −Z です。実装は Google の S2 ライブラリと同じ「絶対値が最大の成分」規則に従います。
x・y・z の絶対値を比較し、最大の軸が面の組を決め、その成分の符号が対向する二面のどちらを選ぶかを決めます。完全な同値のときは軸インデックスが大きい方が勝ち、S2 の LargestAbsComponent と同じ順序になるため、面の継ぎ目上の点も決定的に解決されます。
面が分かれば、支配的でない二つの成分を支配成分で割り、S2 の ValidFaceXYZToUV で公開されている面ごとの符号反転を適用して UV を得ます。結果は −1 から +1 の閉区間に収まり、これ以上のセル階層を適用する前に、点が正方形面内のどこにあるかを示します。
S2 面照会が役立つ場面
領域被覆のために S2 セル ID を公開する地図・GIS 基盤では、本番で使うライブラリと一致する最初の面判定が必要です。離散地球格子を教える教材や試験ジェネレータでは、都市の座標に対する面を学生に答えさせ、不安定な教師用ノートではなく決定的なオラクルで採点できます。
粗いルーティングや A/B 地理分割のために GPS サンプルを S2 面でバケツ分けするログ分析パイプラインは、イベントごとに一度呼び出し、生座標の横に面の整数を保存します。検証失敗は残高を消費しません。
活用例
S2 セル符号化の前段
完全な S2 ライブラリを読み込めないワーカーで階層的なセル ID や領域被覆を計算する前に、緯度経度が六面のどれに含まれるかを解決します。
離散地球格子の教育
都市座標を提出させ、極や面の継ぎ目を含む Google の最大絶対成分規則に一致するオラクルで面インデックスを照合します。
粗い地理バケット分け
ルーティングダッシュボードや A/B 地理分割のために GPS イベントを S2 面でまとめ、サンプルごとに完全なセル ID を計算しません。
よくある質問
緯度と経度から S2 立方体面をどう求めますか?
有限の lat を [-90, 90]、lon を [-180, 180] で送ってください。
面 0 から 5 は何を意味しますか?
Google の S2 規約に一致します。0=+X、1=+Y、2=+Z(北)、3=-X、4=-Y、5=-Z(南)。単位ベクトルの最大絶対直交成分で選びます。
応答の u と v とは何ですか?
UV 座標は選ばれた立方体面上の点を区間 [-1, 1] に配置し、S2 と同じ ValidFaceXYZToUV 符号規約を用います。
緯度や経度が範囲外だとどうなりますか?
緯度は [-90, 90]、経度は [-180, 180] が必須で、無効な要求は課金されません。
2つの面の境目にちょうどある地点はどちらの面になりますか?
常に同じ規則で決まります。単位ベクトルの成分のうち2つが同じ大きさなら、番号の大きい軸が優先されます。そのため境目の地点が計算ごとに別の面へ移ることはありません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/s2-face-from-latlon \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lat":37.7749,"lon":-122.4194}'const res = await fetch("https://api.kit.forhosting.com/geo/s2-face-from-latlon", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lat": 37.7749,
"lon": -122.4194
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/s2-face-from-latlon",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lat": 37.7749,
"lon": -122.4194
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/s2-face-from-latlon", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lat":37.7749,"lon":-122.4194}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lat":37.7749,"lon":-122.4194}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/s2-face-from-latlon", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"lat": 37.7749,
"lon": -122.4194
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.s2_face_from_latlon",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
アルゴリズムは純粋な解析計算で、ネットワーク呼び出しも乱数状態もなく、無料のブラウザ経路と有料 API 経路は常に一致します。
入力契約、応答フィールド、検証エラー
例として、緯度 37.7749・経度 −122.4194 付近のサンフランシスコは、単位ベクトルの最大絶対成分が負の y であるため面 4(−Y)に落ちます。北極(緯度 90、経度 0)は面 2(+Z)、赤道上の経度 0(緯度 0、経度 0)は面 0(+X)です。完全なセル ID が必要な場合は自前の S2 セル符号化器と組み合わせてください。必須の有限数二つを含む JSON 本文を POST してください。lat(別名 latitude)は −90 以上 90 以下、lon(別名 lng・longitude)は −180 以上 180 以下です。数値文字列も JSON 数と同様に受け付けます。欠落フィールド、空文字、NaN や Infinity などの非有限値、範囲外の緯度経度は invalid_input で失敗し、課金されません。成功時は、整形済みの lat と lon、0 から 5 の整数 face、+X・+Y・+Z・−X・−Y・−Z のいずれかである face_name、単位ベクトル成分 x・y・z、面局所の UV 対 u・v、投影法を示す method(s2_face_from_unit_sphere)を返します。本エンドポイントは面と、その上の UV 位置のみを特定します。
S2 面照会が役立つ場面
小さな parse API なら、ピンがどの立方体面にあるかを知るだけのために完全な C++ や Java のバインディングをすべてのエッジワーカーへ載せなくて済みます。実装は純 parse のティア A のため、成功した呼び出しは毎回公開の基本料金 $0.002 で、モデルトークンも外向きネットワークもありません。リクエストを小さく保ち、テストで面の整数と丸めた UV を固定すれば、自前の球面幾何スタックを立てずにインデックス・教材・エッジワーカー向けに再現可能な面割当が得られます。
技術的な質問
緯度経度から S2 立方体面を求めるツールの料金は?
ブラウザツールは無料です。API 要求は成功した呼び出しごとに前払い KIT 残高から $0.002 を使い、無効入力は課金されません。