1. ホーム
  2. c#

[解決済み] 2つの緯度経度ジオ座標間の距離の計算

2022-04-26 16:41:15

質問

2つのGeoCoordinatesの間の距離を計算しています。私のアプリを他の3-4つのアプリと比較してテストしています。距離を計算するとき、他のアプリが3.5マイルを取得しているのに対し、私の計算では平均3.3マイルを取得する傾向があります。これは、私が行おうとしている計算にとって大きな違いです。距離計算のための良いクラスライブラリはないでしょうか?私はC#でこのように計算しています。

public static double Calculate(double sLatitude,double sLongitude, double eLatitude, 
                               double eLongitude)
{
    var radiansOverDegrees = (Math.PI / 180.0);

    var sLatitudeRadians = sLatitude * radiansOverDegrees;
    var sLongitudeRadians = sLongitude * radiansOverDegrees;
    var eLatitudeRadians = eLatitude * radiansOverDegrees;
    var eLongitudeRadians = eLongitude * radiansOverDegrees;

    var dLongitude = eLongitudeRadians - sLongitudeRadians;
    var dLatitude = eLatitudeRadians - sLatitudeRadians;

    var result1 = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) + 
                  Math.Cos(sLatitudeRadians) * Math.Cos(eLatitudeRadians) * 
                  Math.Pow(Math.Sin(dLongitude / 2.0), 2.0);

    // Using 3956 as the number of miles around the earth
    var result2 = 3956.0 * 2.0 * 
                  Math.Atan2(Math.Sqrt(result1), Math.Sqrt(1.0 - result1));

    return result2;
}

何が間違っているのでしょうか?まずkmで計算して、それからマイルに変換したほうがいいのでしょうか?

どのように解決するのですか?

その ジオコーディネート クラス (.NET Framework 4 以降) には、すでに GetDistanceTo メソッドを使用します。

var sCoord = new GeoCoordinate(sLatitude, sLongitude);
var eCoord = new GeoCoordinate(eLatitude, eLongitude);

return sCoord.GetDistanceTo(eCoord);

距離の単位はメートルです。

System.Deviceを参照する必要があります。