エケルト第VI図法計算
このエケルト第VI図法計算ツールは、1地点の緯度・経度を、球面エケルト第VI世界地図上の平面座標x、yへ変換します。図法で用いる擬円筒型の補助角を解き、ご指定の球半径と中央子午線を使って正積な順変換式を適用します。計算した補助角も度単位で結果に含まれるため、処理内容の確認や再現、GISソフトウェアおよび地図学資料との比較を容易に行っていただけます。
無料で実行
エケルト第VI図法の順変換の仕組み
エケルト第VI図法は、世界全体の地図を対象として考案された擬円筒正積図法です。最終的な座標式へ緯度を直接代入するのではありません。まず緯度φをラジアンへ変換し、θ + sin θ = (1 + π/2) sin φを満たす補助角θを求めます。この陰関係には、有効な各緯度について−π/2からπ/2までの範囲に解が1つだけ存在します。本実装では範囲を限定した二分法を使うため、計算は決定論的で、高緯度でも安定しています。次にx = 2Rλ(1 + cos θ)/√(2 + π)およびy = 2Rθ/√(2 + π)を計算します。ここでRは球半径、λは選択した中央子午線に対する相対経度です。半径は両軸に掛かるため、1を指定すると正規化座標になり、メートルやキロメートルで半径を指定すると同じ単位の座標になります。返される補助角を利用して中間計算を検証し、緯線が極へ向かうほど次第に接近する理由も確認していただけます。
入力値、単位、精度の選び方
緯度と経度は十進度でご入力ください。緯度は−90から90、経度は−180から180までです。任意の中央子午線はx = 0となる経度を定め、初期値は0度のグリニッジです。対象地域の中央付近に中央子午線を設定すると、その地域を出力地図の中央近くに配置できます。半径の初期値は1で、数学的な比較や正規化された図形に適しています。線形座標が必要な場合は正の地球半径をご指定ください。ただし、このエケルト第VI図法は楕円体ではなく球を仮定しています。小数桁数の設定が制御するのは、公開されるx、y、θの値だけです。最終丸めまではJavaScriptの浮動小数点精度で計算し、0桁から12桁まで指定できます。経度差は指定された中央子午線を基準にそのまま保持し、暗黙には折り返しません。無効値、欠損値、有限でない値、範囲外の値には、型付き入力エラーを返します。
投影座標の読み方と利用方法
出力されたx、yはエケルト第VI地図平面上の点としてお使いください。地表距離を表す汎用座標ではありません。この図法は球面上の面積を保つため、地域の相対的な大きさが重要な主題図に適していますが、形状、角度、方向、距離をあらゆる場所で保つわけではありません。赤道と中央子午線は直線で、その他の子午線は曲線となり、極は1点ではなく線として表されます。経度が中央子午線と一致する地点ではx = 0、赤道上の地点ではy = 0です。半径が1の場合は、レンダラーと同じ投影定数を正規化点に適用してください。半径がメートルならxとyもメートルですが、2つの投影点間のユークリッド距離を測地距離としてそのまま扱うことはできません。本ツールが行うのは球面の順変換のみです。測地系の選択、楕円体変換、地図端の切り抜き、経緯線網の描画、xとyから地理座標への逆変換は行いません。APIは1リクエスト$0.002からご利用いただけます。
活用例
正積な主題世界地図の作成
面積比が重要なエケルト第VI地図へ記号や地域を描く前に、地理的な観測地点を投影していただけます。
GISや地図処理実装の検証
既知の緯度・経度、投影結果、補助角を、別の球面エケルト第VI実装と比較していただけます。
擬円筒図法の式の学習
求めた補助角をx、yとともに示し、緯度の陰的変換を順に確認していただけます。
よくある質問
エケルト第VI図法は正積図法ですか?
はい。球面エケルト第VIの式は相対面積を保ちますが、すべての形状、角度、方向、距離を保つものではありません。
半径は何を決めますか?
x、yの縮尺と単位を決めます。正規化座標には1を、線形座標にはメートル、キロメートルなどによる正の球半径をご指定ください。
補助角とは何ですか?
指定した地理緯度φに対してθ + sin θ = (1 + π/2) sin φを満たす、一意の角度θです。
中央子午線は変更できますか?
はい。central_meridianを十進度で指定すると、その子午線がx = 0になります。
APIリクエストの料金はいくらですか?
APIは1リクエスト$0.002からです。ブラウザー版も同じ決定論的な投影ロジックを使用します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/eckert-vi-project \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lat":40.7128,"lon":-74.006}'const res = await fetch("https://api.kit.forhosting.com/geo/eckert-vi-project", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lat": 40.7128,
"lon": -74.006
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/eckert-vi-project",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lat": 40.7128,
"lon": -74.006
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/eckert-vi-project", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lat":40.7128,"lon":-74.006}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lat":40.7128,"lon":-74.006}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/eckert-vi-project", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"lat": 40.7128,
"lon": -74.006
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.eckert_vi_project",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |