緯度、経度から方角を求める
以下の方法は地球を球体とみなして球面三角法で解く簡便なものなので測量には使えませんが、
日本付近の緯度での2点間の距離400kmほどで誤差は0.1度を少し超える程度です。
地点Aの経度と緯度をそれぞれL1,B1とし、
地点Bの経度と緯度をそれぞれL2,B2とし、
地点Aからみた地点Bの方位(真北を0度として東回りにはかった角度)をθとすると以下の手順で
求められます。
Y = cos(B2) * sin(L2 - L1)
X = cos(B1) * sin(B2) - sin(B1) * cos(B2) * cos(L2 - L1)
θ[rad] = atan2(Y, X)
もし θ[rad]<0 なら θ = θ + 2π とし結果を0から2π未満に収めます。
θ[deg] = θ[rad] * 180 / π
※ 「*」は乗算、「/」は除算、sin()は正弦関数、cos()は余弦関数、
atan2(y, x)は逆正接関数(返り値は-2π~+2π)、
θ[rad]は弧度法でのラジアン単位の角度、θ[deg]は度単位の角度をそれぞれ表す。
経度は東経を「+」西経を「-」、緯度は北緯を「+」南緯を「-」の数として扱います。
2点の緯度、経度から距離を求める
地球は赤道が膨らんだ形をしています。Hubenyの公式を使うことで、その歪を考慮に入れて地球上の2地点間の距離が計算できます。
1. 経緯度をラジアンに変換
地点1( lon1 , lat1 ) , 地点2( lon2 , lat2 )
lonRad1 = lon1 * PI / 180
latRad1 = lat1 * PI / 180
lonRad2 = lon2 * PI / 180
latRad2 = lat2 * PI / 180
2. 地点1と地点2の平均緯度・緯度差・経度差を計算
latAveRad = (latRad1 + latRad2) / 2
latDiff = latRad1 - latRad2
lonDiff = lonRad1 – lonRad2
3. 子午線曲率半径・卯酉線曲率半径を計算
meridian = 6334834 / ((1 - 0.006674 * sin2(latAveRad))3)0.5
primeVertical = 6377397 / (1 - 0.006674 * sin2(latAveRad))0.5
4. 距離の計算
dDistance = ((meridian * latDiff)2 + (primeVertical * cos(latAveRad) * lonDiff)2)0.5