投資 ときどき プログラム

C#で距離を計測する

はじめに

C#で2地点間の距離を計測するなら、.Net Frameworkのライブラリを利用することで簡単に計算することができます。
このライブラリを使用することで近距離なら誤差も大したことなく計測することができるでしょう。

しかしながら、数百キロもの距離を計算すると、誤差が大きくなるため、求めたい値と乖離したものになってしまいます。
これは、.Net Frameworkに用意されている距離計測用のライブラリが地球を歪みのない真円として計算しているためです。地球は楕円なのです。

一時期、長距離地点間を正確に計測したいという欲求にはまっており、いかに誤差を少なく正確に算出するか手法を探すことに心血を注いでいました。

私が距離を計算するにあたって、使用した計算方法(公式)は次の3つです。
・Haversine(.Net Frameworkのライブラリにあるもの)
・Hubeny
・Vincenty

Haversineの公式

Haversine(.Net Framewoek)
Haversineは、地球を楕円体ではなく球体と想定しています。 長距離の場合、誤差が発生します。

誤差は0.1%程度と言われています。1000kmの距離を計算すると1kmの誤差が発生することになりますが、これを許容できるかどうかですね。

Hubenyの公式

そこそこの精度で計測できます。
後にVincentyの公式をコード化したので私は利用していませんが、こういう公式もあるんだ、と知っていただければと思います。

Vincentyの公式

公式は難解ですが、精度が高いです。私はこれ以上のものを知りません。