ホームページ > バックエンド開発 > C++ > GeoCoowned の距離計算が不正確なのはなぜですか? .NET の `GeoCooperative.GetDistanceTo()` を使用して計算を改善するにはどうすればよいですか?

GeoCoowned の距離計算が不正確なのはなぜですか? .NET の `GeoCooperative.GetDistanceTo()` を使用して計算を改善するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-04 14:05:38
オリジナル
234 人が閲覧しました

Why is my GeoCoordinate distance calculation inaccurate, and how can I improve it using .NET's `GeoCoordinate.GetDistanceTo()`?

地理座標距離計算の最適なアプローチの決定

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート