2点の座標から方位角と距離はどう出す? — 平面直角座標系の逆算・正算と、atan2で90度ずれる理由

,

2点の座標から方位角と距離はどう出す? — 平面直角座標系の逆算・正算と、atan2で90度ずれる理由

2点の座標から方位角と距離はどう出す? — 平面直角座標系の逆算・正算と、atan2で90度ずれる理由

方位角は atan2(ΔY, ΔX)、距離は √(ΔX²+ΔY²) です。 ただし測量の平面直角座標系はX=北・Y=東なので、数学の教科書どおりに atan2(y, x) と書くと引数の順序が逆になり、90度から引いた値が出ます。ここを取り違えたまま正算に戻すと、点は見当違いの場所に置かれます。


逆算:座標から方位角と距離を出す

既知の2点A・Bの平面直角座標から、AB間の方位角と距離を出す計算を逆算(逆計算)と呼びます。

ΔX = X_B − X_A
ΔY = Y_B − Y_A

距離   s = √(ΔX² + ΔY²)
方位角 T = atan2(ΔY, ΔX)      ← 第1引数が ΔY(東)、第2引数が ΔX(北)
                               負なら 360度 を足す

実際に数値を入れます。

点 X(北, m) Y(東, m)
A −8,000.000 12,000.000
B −5,500.000 16,200.000
ΔX = +2,500.000
ΔY = +4,200.000

s = √(2500² + 4200²) = 4,887.740 m
T = atan2(4200, 2500) = 59.237280度 = 59度14分14.2秒

Aから見てBは北へ2.5km・東へ4.2km。方位角は北から時計回りに59度あまり——北東より少し東寄り、という結果は感覚とも合います。

なぜ引数の順序でつまずくのか

プログラミング言語の atan2(y, x) は、x軸から反時計回りに測った角度を返します。数学の座標系ではx軸が右(東)、y軸が上(北)です。

いっぽう測量の平面直角座標系は、X軸が北向き、Y軸が東向き。方位角は北(X軸)から時計回りに測ります。北基準・時計回りという測り方は、数学の東基準・反時計回りとちょうど役割が入れ替わっているので、引数をそのまま当てはめると壊れます。

平面直角座標系1〜19系の全国区域図

先ほどの例で、うっかり atan2(ΔX, ΔY) と書いた場合の結果を並べます。

書き方 結果 何が起きたか
atan2(ΔY, ΔX) 59度14分14.2秒 正しい方位角
atan2(ΔX, ΔY) 30度45分45.8秒 90度から引いた値(90 − 59.2373 = 30.7627度)

90度 − 正しい方位角、つまり鏡に映したような値が出ます。45度に近い方向だと差が小さく、気づかないまま通ってしまうのが厄介なところです。0度・90度・180度・270度付近で検算すると、すぐ露見します。

覚え方はひとつだけです。「東が先、北が後」。atan2(東の増分, 北の増分) と読み替えれば、言語を問わず同じ形になります。

正算:方位角と距離から新しい点を出す

逆の向き、既知点Aから方位角Tの向きへ距離sだけ進んだ点を求める計算を正算(正計算)と呼びます。放射観測やトラバース計算の1区間はこれです。

X_B = X_A + s × cos(T)
Y_B = Y_A + s × sin(T)

ここでもcosがX(北)、sinがY(東)です。数学の x = r cosθ, y = r sinθ と字面は同じなのに、XとYの中身が入れ替わっている点に注意してください。

先ほどの値で戻してみます。

X_B = −8000.000 + 4887.740 × cos(59.237280度) = −5,500.000
Y_B = 12000.000 + 4887.740 × sin(59.237280度) = 16,200.000

Bの座標に戻りました。逆算→正算の往復が元の値に戻るかは、実装したときの最初のテストに向いています。

出た距離は「実際に歩く距離」ではない

ここからが、計算そのものより事故の多いところです。

平面直角座標系は投影された平面なので、そこで測った距離は地球表面の距離と一致しません。各系の原点では縮尺係数0.9999(1万分の1だけ縮めてある)が与えられており、原点から東西へ離れるほどこの係数は大きくなります。

原点付近での目安として、先ほどの4,887.740mを0.9999で割ると——

4,887.740 ÷ 0.9999 = 4,888.229 m   (差 +0.489m)

約4.9kmで49cm。 用地測量や路線の丁張りでは効いてくる量です。逆に、この差を知らずに「現地で巻尺を当てたら合わない」と悩むのもよくある話です。実際の換算は点の位置(中央子午線からの距離)と標高に依存するので、係数を一律に当てるのではなく、系と位置に応じて求めます。

方位角の「北」は真北ではない

もうひとつ。平面直角座標系で求めた方位角は、座標系のX軸方向(座標北・方眼北)を基準にしています。これは原点の中央子午線でだけ真北と一致し、東西へ離れるほど真北からずれます。このずれが真北方向角(子午線収差角)です。

  • 方位磁針で確認したい、天文方位角と突き合わせたい → 真北方向角の補正が要る
  • 同じ系の中で点どうしの相対位置を扱うだけ → 座標北のままで一貫していればよい

図面に「方位角」とだけ書いてあるとき、それが座標北基準なのか真北基準なのかを確かめる癖をつけておくと、後工程の照合が楽になります。

やってはいけない3つ

1. 系をまたいで計算する
第8系の点と第9系の点でΔX・ΔYを取っても意味がありません。原点も向きも別の平面だからです。必ず同じ系に揃えてから計算します。

2. 測地系が違う座標を混ぜる
旧日本測地系の成果と測地成果2011・2024の成果を混ぜると、平面直角座標でも数百メートル規模のズレが入ります。距離と方位角は「ズレた点どうし」の値になり、検算でも見抜きにくくなります。

3. 緯度経度のまま同じ式を使う
緯度経度を直交座標のように扱って atan2(Δ経度, Δ緯度) とするのは誤りです。経度1度の長さは緯度によって縮みますし、楕円体上では出発点の方位角と到着点の方位角が一致しません。緯度経度のまま扱うなら、楕円体上の測地線を解く計算(Vincenty法など)を使います。

まとめ

  • 逆算は s = √(ΔX²+ΔY²)、T = atan2(ΔY, ΔX)。引数は東が先、北が後
  • atan2(ΔX, ΔY) と書き間違えると 90度から引いた値になる。0度・90度付近で検算すると露見する
  • 正算は X = X₀ + s·cos T、Y = Y₀ + s·sin T。cosがX(北)、sinがY(東)
  • 平面上の距離は実距離ではない。原点で縮尺係数0.9999、例では4.9kmあたり約49cmの差
  • 方位角の基準は座標北。真北と突き合わせるなら真北方向角の補正が要る
  • 系・測地系をまたいだ計算、緯度経度のままの計算はしない

本記事の計算例はGeoConverter Proの座標値を用いた自作例です(2026年9月時点)。縮尺係数0.9999は各系の原点での値で、実際の換算は点の位置と標高によって変わります。

出典

  • 国土地理院「平面直角座標系(平成十四年国土交通省告示第九号)」 https://www.gsi.go.jp/sokuchikijun/jpc.html
  • 国土地理院「測地成果2011・測地成果2024」 https://www.gsi.go.jp/sokuchikijun/datum-main.html

次に確認する


開発者より: アプリ・Kindle本・公開プロジェクトの一覧は GitHub: amru195704 にまとめています。


お願い
本記事の情報は参考目的で掲載しており、正確性・完全性を保証するものではありません。誤記・不正確な情報がございましたら、コメント欄よりご指摘いただければ、確認のうえ修正いたします。


コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

トップへ戻る