Vincenty法

提供: testwiki
ナビゲーションに移動 検索に移動

Vincenty法(ヴィンセンティほう、テンプレート:Lang-en-short)とは回転楕円体上の測地法反復計算アルゴリズムである。テンプレート:仮リンク (1975a)によって考案された。

  • 地球形状は回転楕円体として近似可能であり、Vincenty法の逆解法は、その面上で二点間の最小距離測地線の長さ)を計算する。ただしVincenty法の計算誤差は[1]、与える入力点によっては 0.5 mm(0.020″)に達する場合もある。
  • 近年は Karney (2013) による計算方法がVincenty法よりも計算精度・計算速度ともに高く[2]、多く用いられる。

背景

測地法測地線の長さに関する計算)において、順解法(direct method)はある点からの距離と方位角により、他の点を求めるものである。逆解法(inverse method)は2点間の回転楕円体面上距離と方位角を求めるものである。

Legendreは回転楕円体上の測地線緯度更成緯度とし、方位角を同じものとすることで補助球の大円上に正確に対応させられることを示した。 楕円体上の経度と距離は単純な積分によって、補助球上の経度とその大円上の弧長から導かれる。BesselとHelmertはそれらの積分について収束の早い数列を与えた。それにより測地計算が任意の精度で行えるようになった。

Vincenty法の工夫

Vincentyの目的は当時すでに存在していた回転楕円体上の測地法アルゴリズムのプログラムの長さを最小化することであった。彼の未発行のレポート(1975b)によれば数キロバイトのメモリしか搭載していないWang 720 電卓を使用した。

長距離において良い精度を得るために、伝統的な補助球を用いた手法(Legendre (1806), Bessel (1825), and Helmert (1880))を使用している。また、Vincentyの手法はRainsford (1955)による解法にも依存している。

プログラムサイズを最小化するためにVincentyはこれらの数列を初項を小さな値とする拡張しf3のオーダーで打ち切った。これにより、経度と距離の積分式は簡潔なものとなった。式は入れ子型(ホーナー法)にし、一時レジスタを1つだけ用いて多項式計算を行えるようにした。そして、単純な収束計算を陰関数を解くのに用いた。これは収束が遅くinverse法では収束しないこともありうるが、コードサイズは小さいものとなった。

表記法

以下のように定義する。

a
長軸半径 (赤道半径) (6378137.06 m (WGS84) )
f
扁平率 (1/298.257223563 (WGS84) )
b=(1f)a
短軸半径 (極半径) ( 6356752.314245 m (WGS84) )
ϕ1,ϕ2
各点の緯度
U1=arctan[(1f)tanϕ1]
U2=arctan[(1f)tanϕ2]
更成緯度 (補助球上の緯度)
L=L2L1
2点間の経度
λ1,λ2
補助球上の経度
α1,α2
各点における方位角
α
赤道上での方位角
s
2点間の楕円体上の距離
σ
補助球上の弧の長さ

逆解法

逆解法は回転楕円体上の2点の座標(ϕ1,L1),(ϕ2,L2)が与えられた時に、方位角α1,α2と距離sを導く。

U1,U2及びLを計算し、λλ=Lで初期化し、以下の計算をλが収束するまで反復する。

sinσ=(cosU2sinλ)2+(cosU1sinU2sinU1cosU2cosλ)2
cosσ=sinU1sinU2+cosU1cosU2cosλ
σ=arctansinσcosσ[3][4]
sinα=cosU1cosU2sinλsinσ[5]
cos2α=1sin2α
cos(2σm)=cosσ2sinU1sinU2cos2α[6]
C=f16cos2α[4+f(43cos2α)]
λ=L+(1C)fsinα{σ+Csinσ[cos(2σm)+Ccosσ(1+2cos2(2σm))]}

λが所望の精度まで収束したら(10-12の偏差ならば0.06 mmの精度)以下の計算を行う。

u2=cos2αa2b2b2
A=1+u216384{4096+u2[768+u2(320175u2)]}
B=u21024{256+u2[128+u2(7447u2)]}
Δσ=Bsinσ{cos(2σm)+14B[cosσ(1+2cos2(2σm))16Bcos(2σm)(3+4sin2σ)(3+4cos2(2σm))]}
s=bA(σΔσ)
α1=arctan(cosU2sinλcosU1sinU2sinU1cosU2cosλ)[4]
α2=arctan(cosU1sinλsinU1cosU2+cosU1sinU2cosλ)[4]

両極付近の2点間の計算は最初のλを設定した際にπ以上となると、収束しない。

順解法

順解法は始点(ϕ1,L1)と始点における方位角α1、距離sが与えられた時の終点の座標(ϕ2,L2)と方位角α2を導く。

まず、以下の計算を行う。

U1=arctan((1f)tanϕ1)
σ1=arctan(tanU1cosα1)[4]
sinα=cosU1sinα1
cos2α=1sin2α
u2=cos2αa2b2b2
A=1+u216384{4096+u2[768+u2(320175u2)]}
B=u21024{256+u2[128+u2(7447u2)]}

σσ=sbAで初期化し、以下の収束するまで反復計算を行う。

2σm=2σ1+σ
Δσ=Bsinσ{cos(2σm)+14B[cosσ(1+2cos2(2σm))16Bcos(2σm)(3+4sin2σ)(3+4cos2(2σm))]}
σ=sbA+Δσ

σが所望の精度まで収束したら以下の計算を行う。

ϕ2=arctan(sinU1cosσ+cosU1sinσcosα1(1f)sin2α+(sinU1sinσcosU1cosσcosα1)2)[4]
λ=arctan(sinσsinα1cosU1cosσsinU1sinσcosα1)[4]
C=f16cos2α[4+f(43cos2α)]
L=λ(1C)fsinα{σ+Csinσ[cos(2σm)+Ccosσ(1+2cos2(2σm))]}
L2=L+L1
α2=arctan(sinαsinU1sinσ+cosU1cosσcosα1)[4]

始点が極点である時、最初の等式は不定となる。 始点の方位角が真西か真東の場合2番目の等式は不定となる。 しかし、2変数関数のatan2等を用いることでこれらの値は正しく計算できる。

Vincentyによる修正

Vincenty自身の論文(1979)によると、A,BをHelmertの展開係数k1を用いて以下のより簡潔な形式で表すことを提案した。

A=1+14(k1)21k1
B=k1(138(k1)2)

ここで、k1=(1+u2)1(1+u2)+1である。

対蹠付近の点

先に触れたように、逆解法の反復計算は対蹠点付近において、収束しなかったり、収束が遅かったりする。例えば、WGS84測地系において(ϕ1,L1)=(0,0), (ϕ2,L2)=(0.5,179.5)であるとする。この計算は1 mmの精度に達するまでに130回の計算が必要になる。逆解法がどのように実装されるかによって、計算結果は正しく19936288.579 mを返したり、間違った結果を返したり、エラーとなったりする。例えばNGS online utilityによる計算結果は5 kmも長い。Vincentyが提案した方法はこのような場合に収束を速める(Rapp, 1973)。

逆解法が収束しない例として(ϕ1,L1)=(0,0), (ϕ2,L2)=(0.5,179.7)がある。Vincentyの未出版のレポート(1975b)によると、異なった手法がそのような状況に適しており、60回の反復計算の後に19944127.421 mという正しい計算結果に達した。しかし、この手法は他の多くの場合において何千回もの反復が必要となる。

関連項目

注釈

テンプレート:Reflist

参考文献

外部リンク

  • Online calculators from Geoscience Australia:
  • Calculators from the U.S. National Geodetic Survey:
  • Online calculators with JavaScript source code by Chris Veness (Creative Commons Attribution license):
  • GeographicLib provides a utility GeodSolve (with MIT/X11 licensed source code) for solving direct and inverse geodesic problems. Compared to Vincenty, this is about 1000 times more accurate (error = 15 nm) and the inverse solution is complete. Here is an online version of GeodSolve.
  1. 地球を球体として近似すると大円距離の計算となるが、それよりは精度が良い。
  2. Karney (2013) の方法ではニュートン法を用い、あらゆる入力点に対して収束が速く、倍精度浮動小数点数限界精度に達する。
  3. σは赤道及び極付近での精度を保つためにsinσ,cosσから直接計算は行わない。
  4. 4.0 4.1 4.2 4.3 4.4 4.5 4.6 arctanの値は2変数関数であるatan2等によって実装されるべきである。
  5. sinσ=0の時、sinαが不定となる。これは2点が同じ位置もしくは対蹠点であることを意味する。
  6. 2点がともに赤道上にあるとき、U=0となるので、cos(2σm)は使用されない。The limiting value is cos(2σm)=1.