ECEFからローカルENUへの変換
このECEFからENUへの変換ツールは、地球中心・地球固定のXYZ位置を、指定したローカル原点を基準とする東・北・上方向の距離へ変換します。対象のECEF座標と、基準点の測地緯度、経度、任意の楕円体高をご入力ください。計算ではWGS 84上の原点のECEF位置を求め、対象位置との差分を取り、そのベクトルをローカル接平面座標系へ回転します。別の楕円体パラメータや出力精度もご指定いただけます。
無料で実行
ECEF点とローカル原点を同じ基準で指定します
ECEF座標は、回転する地球に固定された直交座標系で位置を表します。X軸は緯度0度・経度0度を通り、Y軸は緯度0度・東経90度を通り、Z軸は北極方向を向きます。対象となる3つの座標はすべてメートル単位でご入力ください。ローカル座標系には原点も必要であり、ここでは測地緯度、経度、楕円体高で指定します。緯度と経度は十進度で表し、高さは平均海面からではなく楕円体の法線に沿って測定します。この違いは重要です。地図に記載された標高は正高であることが多く、ジオイドと基準楕円体が異なるため、そのまま楕円体高として扱えるとは限りません。対象のECEF座標と原点には同じ測地基準系をご使用ください。既定値はWGS 84の長半径と逆扁平率で、一般的なGNSS座標に適しています。地域測地系や別の基準楕円体を使用するデータの場合は、ローカル変位を解釈する前に対応するパラメータをご入力ください。
東・北・上方向への回転を理解します
変換は2つの決定論的な段階で行われます。最初に、選択した楕円体を用いて基準の測地位置をECEFへ変換し、その原点を対象のXYZ位置から差し引きます。ここで得られるのは新たな絶対位置ではなく変位ベクトルです。次に、基準緯度と経度を用いてベクトルを回転します。東方向は緯線に接し、経度が増える向きを正とします。北方向は子午線に接し、測地緯度が増える向きを正とします。上方向は基準楕円体の法線方向で、外向きを正とします。したがって、返される3つの値は符号付きのメートル単位の距離です。東が負なら原点の西、北が負なら南、上が負なら原点の接平面より下を意味します。ENUはローカルな線形座標系であるため、限られた範囲では各成分を直感的に扱えます。距離が大きい場合、地球の曲率によってローカル鉛直の向きが変わるため、上成分は単純な高さの差と大きく異なることがあります。
測位や工学の処理に結果を活用します
ローカルENU座標は、地球規模の大きなXYZ値ではなく相対的な移動や形状が必要な用途に便利です。測量ソフトウェアでは観測点を基準局周辺の変位として表せます。ロボットシステムでは基地を中心とする地図上に検出位置を配置でき、GNSS解析では測定したアンテナ位置を既知の基準と比較できます。原点は慎重に選び、その緯度、経度、高さ、楕円体、測地基準系を結果とともに保存してください。これらのメタデータがなければ、ENUの3成分からグローバル位置を復元できません。小数桁の設定では0桁から12桁まで表示上の丸めを指定できますが、計算自体は丸める前に浮動小数点演算で行われます。桁数を増やしても、入力にない精度が生まれるわけではありません。品質確認では、原点そのものの正確なECEF座標を変換し、指定精度内で東・北・上がすべて0になることをご確認ください。原点付近の既知の変位についても符号をご確認ください。この計算は純粋でネットワークを利用せず、同じ入力には常に同じ結果を返します。
活用例
GNSS測量の中心を設定
受信機の位置を、測量済みの基準標からの分かりやすいローカル変位として表します。
ロボット用ローカル座標系を構築
地球固定位置を、車両基地や現地局を中心とする東・北・上座標へ変換します。
アンテナ変位を解析
アンテナのECEF位置を既知の原点と比較し、水平成分と鉛直成分を個別に確認します。
よくある質問
変換料金はいくらですか?
APIリクエスト1回の料金は$0.002です。ブラウザ版はネットワーク上で計算せず、ローカルで実行できます。
既定ではどの地球モデルを使用しますか?
既定値はWGS 84の長半径6378137メートルと逆扁平率298.257223563です。
基準高は省略できますか?
はい。既定値は、選択した基準楕円体から0メートルです。
平均海面からの標高を入力できますか?
処理上の楕円体高と一致する場合を除き、そのままでは入力できません。適切なジオイドモデルで正高を先に変換してください。
上成分が単純な高さの差にならないのはなぜですか?
上成分は原点における楕円体法線方向の成分です。離れた点では地球の曲率により、単純な高さの差とは異なります。
出力の単位は何ですか?
東・北・上は、ECEF座標および楕円体寸法と同じメートル単位で返されます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/ecef-to-enu \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"x":6378137,"y":100,"z":50,"ref_lat_deg":0,"ref_lon_deg":0}'const res = await fetch("https://api.kit.forhosting.com/geo/ecef-to-enu", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"x": 6378137,
"y": 100,
"z": 50,
"ref_lat_deg": 0,
"ref_lon_deg": 0
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/ecef-to-enu",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"x": 6378137,
"y": 100,
"z": 50,
"ref_lat_deg": 0,
"ref_lon_deg": 0
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/ecef-to-enu", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"x":6378137,"y":100,"z":50,"ref_lat_deg":0,"ref_lon_deg":0}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"x":6378137,"y":100,"z":50,"ref_lat_deg":0,"ref_lon_deg":0}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/ecef-to-enu", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"x": 6378137,
"y": 100,
"z": 50,
"ref_lat_deg": 0,
"ref_lon_deg": 0
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.ecef_to_enu",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |