計算式は次のとおりです。
例証します:
1. 式中の経度と緯度はラジアンで表されます。
2. Lat1 Lng1 は点 A の経度および緯度をそれぞれ表し、Lat2 Lng2 は点 B の経度および緯度をそれぞれ表します。
3. a=Lng1 -Lng2 は 2 点の緯度の差、b=Lat1 - Lat2 は 2 点の経度の差です。
4. 6378.137 は地球の半径 (キロメートル) です。
C# の実装関数は次のとおりです。
public double DistanceOfTwoPoints(double lat1, double lng1, double lat2, double lng2)
{
ダブル radLng1 = lng1 * Math.PI / 180.0;
ダブル radLng2 = lng2 * Math.PI / 180.0;
ダブル a = radLng1 - radLng2;
double b = (lat1-lat2) * Math.PI / 180.0;
double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2), 2) +
Math.Cos(radLng1) * Math.Cos(radLng2) * Math.Pow(Math.Sin(b/2), 2)))* 6378.137;
s =Math.Round(s * 10000) / 10000;
を返します。
}
実際に検証した結果、正しく合格しました(返される結果の単位はキロメートルです)。