単位ベクトルを緯度・経度へ変換
単位球上の直交座標による方向を、人や地図ソフトウェアが読みやすい地理座標へ変換します。右手系の単位ベクトルのx、y、z成分を指定すると、選択した表示精度で緯度と経度を度単位で返します。ベクトルの長さが実際に1であることを検証し、ごく小さな浮動小数点誤差だけを許容して、明記された軸規約を適用します。計算は決定論的で、ネットワークやジオコーディング用データベースを必要としません。APIで正常に処理されたリクエスト1回の料金は$0.002です。
無料で実行
変換前に軸の規約をご確認ください
単位球上の点は、2つの角度ではなく3つの直交座標成分として保存できます。この機能では一般的な右手系の地球中心規約を使います。正のx軸は緯度0度・経度0度、正のy軸は緯度0度・東経90度、正のz軸は北極を指します。したがって、ベクトル(1, 0, 0)は緯度0度・経度0度となり、(0, 1, 0)は緯度0度・東経90度となります。y成分が負なら本初子午線より西側、z成分が負なら南半球です。返される経度は通常のマイナス180度からプラス180度までの範囲です。極点ではすべての子午線が交わるため、経度は数学的に定まりませんが、指定されたx成分とy成分からatan2が生成する安定した値を返します。グラフィックス、天文学、ロボット工学、シミュレーションなどのソフトウェアから得たベクトルを地理座標として解釈する前に、同じ軸順序を使用していることをご確認ください。yとzを入れ替えたり、軸の向きを反転したりするシステムもあります。3つの値が単位長でも、その規約は別の向きを表します。本機能は座標を変換しますが、文書化されていない入力座標系を推測または修正するものではありません。
検証と球面変換の計算方法
最初に、x、y、zがマイナス1からプラス1までの有限なJSON数値であることを確認します。次に、3成分の斜辺演算でユークリッド長を求めます。正しい単位ベクトルの長さは1ですが、実際の処理では行列の乗算やシリアライズ後に無害な浮動小数点誤差が生じることがあります。そのため、1との差が100万分の1以内なら受け入れ、角度を計算する前に正規化します。それより大きな差は無効な入力として拒否し、任意の非単位ベクトルを黙って球面へ投影することはありません。緯度は正規化したzの逆正弦です。経度は正規化したyとxに対するatan2で求めるため、正しい象限を保ち、符号の特別な規則なしで反対子午線をまたげます。両方の角度をラジアンから度へ変換し、指定精度で丸めます。既定は小数点以下10桁で、明示する場合は0から15桁までです。JSONの応答やテストを安定させるため、負のゼロは通常のゼロに変換します。応答には緯度・経度の各項目、短縮名latとlon、適用精度、規約タグが含まれます。ネットワーク、乱数、時刻、測地系検索、反復近似は使用しないため、同じ入力ならブラウザーとAPIで同じ結果になります。
地図やデータ処理で安全に利用する方法
単位ベクトルには、経度の折り返しによる不連続を避け、方向を滑らかに補間でき、3次元エンジンと自然に連携できる利点があります。一方、人向けの画面、GIS書き出し、ログ、地図ラベルでは通常、緯度と経度が必要です。本機能はこの2つの表現を橋渡しします。カメラレイや地球儀上の選択結果を読みやすい座標へ変換したり、シミュレーションデータの正規化位置を解読したり、球面幾何コードの明確なテストデータを作成したりできます。長さだけでなく、入力の意味も検証してください。正規化した面法線と地球中心位置は同じ数値形式になり得ますが、意味は異なります。入力ベクトルの長さが任意の場合は、差異をこのエンドポイントで隠さず、生成側のシステムで意図的に正規化してその判断を記録してください。厳密な単位長検査は、単位の誤り、正規化漏れ、破損レコードを早期に発見するためのものです。結果は角度方向だけで、高度、地形標高、測地系変換、逆ジオコーディングによる地名は含みません。バッチ処理では項目ごとに呼び出し、後工程に必要な精度を保持してください。対話的な計算はブラウザーで行え、自動処理では同じ決定論的ソルバーを正常な1回につき$0.002で利用できます。
活用例
3D地球儀の選択位置にラベルを付ける
地球儀で選択した正規化方向を緯度・経度に変換し、ツールチップ、診断パネル、書き出し用マーカーに利用できます。
シミュレーション座標を読み解く
科学・工学データの単位球位置を、文書化された軸規約に基づく読みやすい角度座標へ変換します。
球面幾何のテストデータを作る
方向を正規化直交ベクトルで保存するテスト向けに、安定した緯度・経度の期待値を生成します。
よくある質問
変換料金はいくらですか?
正常なAPIリクエスト1回は$0.002です。同じ決定論的計算をブラウザーでも実行できます。
どの計算式を使いますか?
微小な浮動小数点誤差を除くため受理したベクトルを正規化し、緯度をasin(z)、経度をatan2(y, x)で求めます。
ベクトルの長さは厳密に1でなければなりませんか?
長さと1との差が100万分の1以内である必要があります。通常の丸め誤差は許容し、未正規化のベクトルは拒否します。
どの座標規約が必要ですか?
正のxは緯度0・経度0、正のyは緯度0・東経90、正のzは北極を表します。
極点ではどの経度を返しますか?
厳密な極点では経度は定まりませんが、指定されたx成分とy成分から得た安定したatan2の結果を返します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/unit-vector-to-latlon \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"x":1,"y":0,"z":0}'const res = await fetch("https://api.kit.forhosting.com/geo/unit-vector-to-latlon", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"x": 1,
"y": 0,
"z": 0
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/unit-vector-to-latlon",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"x": 1,
"y": 0,
"z": 0
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/unit-vector-to-latlon", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"x":1,"y":0,"z":0}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"x":1,"y":0,"z":0}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/unit-vector-to-latlon", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"x": 1,
"y": 0,
"z": 0
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.unit_vector_to_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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |