USNGを緯度・経度へ変換
米国国家グリッドの参照値は、無限に精密な点ではなく範囲を表します。この変換ツールは、連続表記または空白入りのUSNGを読み取り、UTMゾーン、緯度帯、100キロメートル区画、数値精度を検証し、セル中心のおおよそのWGS84緯度・経度を返します。セル寸法、精度、UTM座標、ゾーン、緯度帯、区画も確認できます。地図サービス、通信、乱数、現在時刻を使わず、決定的なローカル計算だけで処理します。
無料で実行
USNG参照値がセルを指定する仕組み
参照値は1から60までのUTMゾーンと、I・Oを除くCからXまでの緯度帯文字で始まります。続く2文字は100キロメートル区画です。列の文字体系は3ゾーンごとに繰り返し、行は奇数ゾーンと偶数ゾーンでずれます。残りの数字は東距と北距へ同数ずつ分けます。各軸1桁なら10キロメートル、5桁なら1メートル、数字なしなら区画全体です。本ツールは空白を除去し、大文字へ統一して各要素を検証します。次に文字と数字を南西端のUTM値へ展開し、両軸へセル寸法の半分を加えます。この処理により角ではなく中心が得られます。参照値は依然として面積を示すため、とくに粗い精度では代表点としてお使いください。cell_size_mとpointのcenterが、この意味を後続システムへ明示します。
UTMメートル値からWGS84座標への計算
中心を求めた後、指定緯度帯の最小北距を使って、200万メートルごとに反復する行文字を解決します。南半球の帯ではUTMの偽北距を適用します。その座標をWGS84楕円体、扁平率、縮尺係数、子午線弧の級数で逆変換し、ゾーンから中央子午線を選びます。算出した緯度が指定帯に入らない組み合わせはエラーになります。JSONにはlatitude、longitude、lat、lon、正規化USNG、ゾーン、帯、区画、精度、セル寸法、中心UTM座標、測地基準を収録します。小数は8桁へ安定して丸めるため、同じ入力から同じ結果を得られます。ジオコーダーには接続せず、ブラウザーとAPIで同じ有限計算を実行します。
精度の選択と中心点の適切な利用
数字の桁数は書式ではなく精度の表明として扱ってください。各軸5桁は名目上1メートルのセルですが、元の観測精度まで証明しません。1桁は10キロメートルを覆うため、中心が実物から離れる場合があります。報告、現場メモ、資産、履歴データを取り込む際はcell_size_mも保存してください。地図では中心にマーカーを置き、寸法で不確実性やズームを表せます。連続表記と空白入り表記に対応しますが、文字不足、I・O、奇数個の数字、1–60外のゾーン、不適合な列や緯度帯は拒否します。有効なAPI項目は$0.002で、個別確認はブラウザーで行えます。セルの多角形が必要な場合はUTM中心と寸法を保持するか、境界変換をご利用ください。住所、標高、行政区域、測量精度は提供しません。
活用例
現場報告を地図へ配置
帳票や無線記録のUSNGを、精度を保ったWGS84中心マーカーへ変換します。
旧グリッド記録を取り込み
連続または空白入りの値をGIS、監査、移行用の決定的な座標へ正規化します。
地図ソフトウェアを検証
安定した中心、UTM値、セル寸法をUSNG対応アプリの回帰テストに使えます。
よくある質問
セル内のどの点を返しますか?
中心です。WGS84変換前に両方のUTM軸へセル寸法の半分を加えます。
数値精度は結果へどう影響しますか?
各軸0~5桁で100キロメートルから1メートルのセルを表し、大きいセルほど不確実性が増します。
空白や小文字を含められますか?
はい。一般的な空白を除き、検証前に文字を大文字へ統一します。
どの測地基準を使いますか?
緯度・経度はWGS84です。UTM中心、ゾーン、帯、区画、寸法も返します。
料金はいくらですか?
ブラウザーツールは無料です。有効なAPI項目は公開基本料金$0.002です。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/usng-to-latlon \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"usng":"18S UJ 23483 06479"}'const res = await fetch("https://api.kit.forhosting.com/geo/usng-to-latlon", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"usng": "18S UJ 23483 06479"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/usng-to-latlon",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"usng": "18S UJ 23483 06479"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/usng-to-latlon", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"usng":"18S UJ 23483 06479"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"usng":"18S UJ 23483 06479"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/usng-to-latlon", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"usng": "18S UJ 23483 06479"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.usng_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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |