首頁 > 後端開發 > C++ > 為什麼我的地理座標距離計算不準確,如何使用 .NET 的「GeoCooperative.GetDistanceTo()」來改進它?

為什麼我的地理座標距離計算不準確,如何使用 .NET 的「GeoCooperative.GetDistanceTo()」來改進它?

Mary-Kate Olsen
發布: 2025-01-04 14:05:38
原創
232 人瀏覽過

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

確定地理座標距離計算的最佳方法

為了確定兩個地理座標之間的準確距離計算,開發人員遇到了自己的結果與他人的結果之間的差異由外部應用程式提供。雖然他們目前的 C# 實現返回的平均距離為 3.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 及更高版本中引入的 GeoCoordinate 類別。此類別提供了一個名為 GetDistanceTo 的內建方法,該方法簡化了 GeoCoordinates 之間的距離計算。

以下程式碼示範如何利用 GetDistanceTo:

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

return sCoord.GetDistanceTo(eCoord);
登入後複製

此方法傳回以公尺為單位的距離。要獲得以英里為單位的距離,可以將結果除以 1609.344。引用 System.Device 命名空間是使用 GeoCooperative 類別的先決條件。

透過採用這種方法,開發人員可以使用經過驗證且可靠的方法來計算 GeoCoordination 之間的距離,從而消除出現錯誤或不準確的可能性。

以上是為什麼我的地理座標距離計算不準確,如何使用 .NET 的「GeoCooperative.GetDistanceTo()」來改進它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板