為了確定兩個地理座標之間的準確距離計算,開發人員遇到了自己的結果與他人的結果之間的差異由外部應用程式提供。雖然他們目前的 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中文網其他相關文章!