.NET Frameworkで2点間(緯度経度)の距離を求める
三平方の定理じゃだめです。
地球は丸いのでかなりの誤差がでます、ごめんなさい。
ということでちゃんと求めたくなる度にググって上位の結果から処理を作っていたんですが・・・
https://msdn.microsoft.com/ja-jp/library/system.device.location.geocoordinate(v=vs.110).aspx
こんなクラスが.NET Framework 4.0から追加されていたみたいです。
GeoCoordinate クラスを使って求めてみる
使う時はプロジェクトにSystem.Deviceアセンブリを追加しておきましょう。
var lat1 = 35.0; var lon1 = 139.0; var lat2 = 36.0; var lon2 = 140.0; var distance = new GeoCoordinate(lat1, lon1).GetDistanceTo(new GeoCoordinate(lat2, lon2)); Console.WriteLine($"Distance:{distance}m");
これだけ。 超簡単じゃん!
ちなみにMSDNのGetDistanceTo関数の説明には
距離の計算には、Haversine 式が使用されます。 Haversine 式は、地球の曲線を説明していますが、地球が楕円ではなく、球状であることを前提としています。 長距離については、Haversine 式の誤差は 0. 1% 未満です。 高度は距離の計算に使用されません。
と書いてあります。地球は楕円じゃなかった。
まぁこの程度の誤差なら普通は許容範囲ですよね。