-
@ThothChildren
- 2018.10.30
- PV 358
球面状の距離を求めたい
ー 概要 ー
球面状の二点間距離を求める方法についてまとめます.正確さと計算速度を引き換えに3種類の方法があります.

この章を学ぶ前に必要な知識
条件
- 球面または回転楕円の表面上に距離を求めたい2点
- 距離は球体に張り付くようにして求める
- (必須ではないが)緯度経度で表示
効果
- 3つの球面状の距離の出し方があり、速度と精度のバランス
ポイント
- Great-Circular Distance と haversine Formula とVincenty Formulaの3方法
解 説
球面状の二点間距離を求める方法についてまとめます.正確さを犠牲にするか計算速度を犠牲にするかで3種類の方法があります.どれも円弧距離 d = rθを利用します.
・Great-Circular Distance : シンプルに二点の間の弧度θを求めてrθで求める.
・Haversine Formula : θの計算における丸め誤差をより改善(現代の64bit浮動小数演算精度ではあまりGreatCircularと大差ない).
・Vincenty Formula : 真反対にある点同士では不正確なHarversine Formulaを改善 | 球面状の距離を求めたい |
二点両方とも緯度経度の角度で位置を与えられるものとして、
ϕ1,ϕ2ϕ1,ϕ2は緯度、λ1,λ2λ1,λ2は経度を表すものとする. | 下記計算の前提 |
Great-Circular Distanceにおける弧度θθ(二点を通る断面で見たときのなす角度)の求め方は以下の式.
θ=arccos(sinϕ1⋅sinϕ1+cosϕ1⋅cosϕ1⋅cos(Δλ))θ=arccos(sinϕ1⋅sinϕ1+cosϕ1⋅cosϕ1⋅cos(Δλ))
この式と半径rrから求める球面状の距離ddは、
d=rθd=rθ
| Great-Circular Distance |
Haversine Formulaは上記の式の精度を改善した以下のような式を提案した.
θ=2arcsin√sin2(Δϕ2)+cosϕ1⋅cosϕ1⋅sin2(Δλ2)θ=2arcsin√sin2(Δϕ2)+cosϕ1⋅cosϕ1⋅sin2(Δλ2)
この式と半径rrから求める球面状の距離ddは、
d=rθd=rθ
| 上記のGreat Circular Distanceの精度を改善させた
Haversine Formula |
Vincentyはさらに以下のようなより正確な式を与えた.
θ=arctan(√(cosϕ2⋅sin(Δλ))2+(cosϕ1⋅sinϕ2−sinϕ1⋅cosϕ2⋅cos(Δλ)sinϕ1⋅sinϕ2+cosϕ1⋅cosϕ2⋅cos(Δλ))θ=arctan(√(cosϕ2⋅sin(Δλ))2+(cosϕ1⋅sinϕ2−sinϕ1⋅cosϕ2⋅cos(Δλ)sinϕ1⋅sinϕ2+cosϕ1⋅cosϕ2⋅cos(Δλ)) | Vincentyの式 |
Vincenty法は、かなりの精度で回転楕円体としての地球上の二点間の距離を求めることができ、頻繁に使用される. | Vincenty法に関して |
![]() | 想定している二点間の状態.
(Wikipediaより引用) |
この章を学んで新たに学べる
Comments