2 つの地理座標間の正確な距離計算を確認するために、開発者は独自の結果とそれらの結果の間に不一致が発生しました。外部アプリケーションによって提供されます。現在の C# 実装では平均 5.3 マイルの距離が返されますが、他のプラットフォームでは 3.5 マイルに近い距離が報告されます。この大きな差異により、潜在的なエラーや代替の距離計算方法の調査が行われました。
開発者の現在の実装は次の式を中心に展開しています。
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; }
開発者は、この差異は次のようなものである可能性があると仮説を立てています。これは、単位変換 (キロメートルで計算してからマイルに変換する) の違いに起因します。ただし、さらに検討した結果、最適な解決策は .NET Framework 4 以降で導入された GeoCoowned クラスを利用することにあることが判明しました。このクラスは、地理座標間の距離の計算を簡素化する GetDistanceTo という組み込みメソッドを提供します。
次のコードは、GetDistanceTo を利用する方法を示しています。
var sCoord = new GeoCoordinate(sLatitude, sLongitude); var eCoord = new GeoCoordinate(eLatitude, eLongitude); return sCoord.GetDistanceTo(eCoord);
このメソッドは、距離をメートル単位で返します。距離をマイル単位で取得するには、結果を 1609.344 で割ります。 System.Device 名前空間の参照は、GeoCoowned クラスを利用するための前提条件です。
このアプローチを採用することで、開発者は GeoCoowned 間の距離を計算する実証済みの信頼できる方法にアクセスでき、エラーや不正確さの可能性を排除できます。
以上がGeoCoowned の距離計算が不正確なのはなぜですか? .NET の `GeoCooperative.GetDistanceTo()` を使用して計算を改善するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。